2011-10-09 4 views
2

나는이처럼 보이는 테이블이있는 경우 : 나는 정상적인 SELECT 문을 이해 열을 행으로 설정하는 방법

ID int 
    Name varchar 
    City1 varchar 
    City2 varchar 
    City3 varchar 
    State1 varchar 
    State2 varchar 
    State3 varchar 

가이 같은 데이터를 반환합니다

ID, Name, City1, City2, City3, State1, State2, State3 

하지만 어떻게 내가 할을 SELECT 문을 반환하여 여러 도시/주를 다른 행으로 반환하고 그룹화하십시오. 그러면 다음과 같이 보입니다 :

ID, Name, City, State 

그리고 이러한 열 대신 Color1, Color2, Color3 및 State1, State2, State3

1,2,3 Is Null 경우 다른 모든 데이터가 동일하게 유지되는 SELECT 문에서 더 많은 행이됩니다. .

최소한의 코드로 어떻게 접근 할 것 인가에 대한 제안이 있으십니까? 이 모든 것을 처리하는 하나의 SELECT 문을 선호합니까?

+0

가능한 중복 [SQL 서버 :? 내가 열 하나에 여러 행을 구분합니다 쉼표 수 (http://stackoverflow.com/questions/2046037/sql-server-can-i-comma-delimit-multiple -rows-into-one-column) –

답변

6

테이블을 세 번 쿼리하고 union all을 사용하여 결과를 결합 할 수 있습니다.

select ID, Name, City1 as City, State1 as State 
from YourTable 
union all 
select ID, Name, City2, State2 
from YourTable 
union all 
select ID, Name, City3, State3 
from YourTable 

크로스 조인과 몇 가지 사례 문을 사용하여 하나의 쿼리로 수행 할 수도 있습니다.

select ID, 
     Name, 
     case T.N 
     when 1 then City1 
     when 2 then City2 
     when 3 then City3 
     end as City, 
     case T.N 
     when 1 then State1 
     when 2 then State2 
     when 3 then State3 
     end as State 
from YourTable 
    cross join (values(1),(2),(3)) as T(N) 
+0

null이 아닌 경우는 어떻습니까? –

+0

@ZeeTee - null 값을 원하지 않으면 where 절을 추가해야합니다. 'City1이 null이 아닌 곳 '등 –

+0

@ZeeTee - null 값이 아닌 값을 어떻게 제외 시킬지 잘 모르겠다. 예를 들어 한 행의 City2에 null 값이있는 경우에도 해당 행에 City1과 City3을 포함 시키시겠습니까? –

관련 문제