に結果をロールアップする方法:SQL - 私はテーブルを持っている場合は1行
私の結果であるように私は、クエリを返すことができますどのようにID NAME
1 Red
2 Blue
3 Green
:
Col1 Col2 Col3
Red Blue Green
私はどうなります内部結合自体か、ピボットテーブルが必要でしょうか?
あなたはPIVOTと、動的SQLを使用することができますに結果をロールアップする方法:SQL - 私はテーブルを持っている場合は1行
私の結果であるように私は、クエリを返すことができますどのようにID NAME
1 Red
2 Blue
3 Green
:
Col1 Col2 Col3
Red Blue Green
私はどうなります内部結合自体か、ピボットテーブルが必要でしょうか?
あなたはPIVOTと、動的SQLを使用することができますはい、あなたはそれが参加して行うことができ、例えば:
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;
もちろん、列の数は固定されていますが、ロールアップする行を追加する場合は、編集する必要があります。
これは3行でのみ動作し、各行に1つのlibeを追加する必要があります!! – Hadi
はい、ロールアップする行数が固定されている場合、このソリューションは質問の結合部分に答えます。 – quantummind
:
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;
ピボットを試しましたか? –
例のように単純な場合は、列のエイリアスだけでもかまいません。より複雑で動的な場合は、ピボットを使用します。 – Santi
さらに多くのデータを表示して、クエリが些細なものにならないようにすることはできますか? –