2016-10-24 3 views
1

에 결과를 롤업하는 방법 :SQL - 나는 테이블이있는 경우 1 행

Col1 Col2 Col3 
Red Blue Green 

나는 그냥 할 것 :

ID NAME 
1 Red 
2 Blue 
3 Green 

을 내 결과가되도록 내가 쿼리를 반환 할 수있는 방법 내부 조인 자체 또는 피벗 테이블이 필요합니까?

+0

피벗을 사용해 보셨습니까? –

+0

예제처럼 간단하면 별칭을 지정할 수 있습니다. 더 복잡하거나 역동적 인 경우 피벗을 사용합니다. – Santi

+1

쿼리가 사소하지 않도록 더 많은 데이터를 표시 할 수 있습니까? –

답변

1

예, 당신은 그것을 가입으로 할 수있는 예 :

select t1.name col1, t2.name col2, t3.name col3 
from yourtable t1 
join yourtable t2 on t2.id=2 
join yourtable t3 on t3.id=3 
where t1.id=1; 

아니면 같은 포함 된 SELECT 문, 함께 할 간단하게 할 수 있습니다 : MySQL의에서 : 오라클에서

select 
    (select name from yourtable where id=1) col1, 
    (select name from yourtable where id=2) col2, 
    (select name from yourtable where id=3) col3; 

:

,
select 
    (select name from yourtable where id=1) col1, 
    (select name from yourtable where id=2) col2, 
    (select name from yourtable where id=3) col3 
from dual; 

물론이 쿼리에서 열 수는 고정되어 있으므로 롤업 할 행을 추가 할 경우 편집해야합니다.

+0

이것은 3 행에서만 작동하며 각 행에 대해 하나의 libe를 추가해야합니다 !! – Hadi

+0

예, 롤업 할 고정 행 수가있는 경우이 솔루션은 질문의 조인 부분에 응답합니다. – quantummind

0

당신이 PIVOT 동적 SQL을 사용할 수 있습니다

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' +  QUOTENAME(id) 
       from yourtable 
       group by ColumnName, id 
       order by id 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 

set @query = N'SELECT ' + @cols + N' from 
     (
      select id, ColumnName 
      from yourtable 
     ) x 
     pivot 
     (
      max(ColumnName) 
      for id in (' + @cols + N') 
     ) p ' 

exec sp_executesql @query; 
관련 문제