2016-10-24 13 views
1

に結果をロールアップする方法:SQL - 私はテーブルを持っている場合は1行

私の結果であるように私は、クエリを返すことができますどのように
ID NAME 
1 Red 
2 Blue 
3 Green 

Col1 Col2 Col3 
Red Blue Green 

私はどうなります内部結合自体か、ピボットテーブルが必要でしょうか?

あなたはPIVOTと、動的SQLを使用することができます
+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行でのみ動作し、各行に1つのlibeを追加する必要があります!! – Hadi

+0

はい、ロールアップする行数が固定されている場合、このソリューションは質問の結合部分に答えます。 – quantummind

0

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; 
関連する問題