2014-01-14 2 views
1

동일한 테이블에서 2 개의 쿼리를 실행하려고하고 2 개의 다른 열에서 결과를 얻으려고합니다.sql 2 열로 필드를 선택하십시오.

쿼리 1 : select ID as M from table where field = 1 반환 :

1 
2 
3 

질의 2 : select ID as N from table where field = 2 반환 :

4 
5 
6 

내 목표는

Column1 - Column2 
----------------- 
1   4 
2   5 
3   6 

어떤 제안을 얻을 수 있습니다? 나는 두 테이블간에 데이터를 가입하는 외래 키 관계에 대한 기본 키가 될 SQL 서버 2008 R2를

감사

+3

SQL 결과 세트 * 본질적으로 순서가 있습니다. "첫 번째"또는 "두 번째"행에 대한 개념이 없습니다. 두 결과 집합은 어떻게 정렬됩니까? –

+0

order by 절은 ROW_NUMBER와 같은 윈도우 함수에있을 수 있습니다. 마지막 주문에만 국한되지 않고 –

답변

2

가있다을 사용하고 있습니다.

관계형 대수와 정규화에 대한 아이디어입니다. 그렇지 않으면 데이터의 상관 관계가 의미가 없습니다.

http://en.wikipedia.org/wiki/Database_normalization

십자가는 당신에게 모든 가능성을 줄 것이다 가입하세요. (1,4), (1,5), (1,6) ... (3,6). 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다.

항상 두 테이블에 서로 게이트 키를 생성하기 위해 ROW_NUMBER() OVER() 함수를 사용할 수 있습니다. OVER() 절에서 원하는 방식으로 데이터를 정렬하십시오. 그러나 이것은 여전히 ​​일반 형식이 아닙니다.

요컨대. 왜 그럴까요?

빠른 테스트 데이터베이스. 비 정상적인 형태의 스포츠 용품 및 가정 용품 제품을 보관합니다.

SELECT의 결과는 아무런 의미가 없습니다.

-- Just play 
use tempdb; 
go 

-- Drop table 
if object_id('abnormal_form') > 0 
drop table abnormal_form 
go 

-- Create table 
create table abnormal_form 
(
    Id int, 
    Category int, 
    Name varchar(50) 
); 

-- Load store products 
insert into abnormal_form values 
(1, 1, 'Bike'), 
(2, 1, 'Bat'), 
(3, 1, 'Ball'), 
(4, 2, 'Pot'), 
(5, 2, 'Pan'), 
(6, 2, 'Spoon'); 

-- Sporting Goods 
select * from abnormal_form where Category = 1 

-- Home Goods 
select * from abnormal_form where Category = 2 

-- Does not mean anything to me 
select Id1, Id2 from 
(select ROW_NUMBER() OVER (ORDER BY ID) AS Rid1, Id as Id1 
from abnormal_form where Category = 1) as s 
join 
(select ROW_NUMBER() OVER (ORDER BY ID) AS Rid2, Id as Id2 
from abnormal_form where Category = 2) as h 
on s.Rid1 = h.Rid2 

사용자의 추가적인 정보가 필요합니다. * 당신이 절 by``주문을 사용하지 않는

enter image description here

+0

OP는 단 하나의 테이블을 사용합니다. 그의 게시물의 맨 처음 문장을보십시오. –

+0

하나의 테이블 인 경우 SELECT COL1, COL2 FROM TABLE1. 관계는 튜플 또는 레코드에 있습니다. –

+0

** 잘못되었습니다 **. 게시물을 읽으십시오. –

관련 문제