1

SSMS 2008 R2 で 1 行のみを返す T-SQL クエリを開発しています。しかし、問題は、この 1 行に 4 つのフィールドがあり、代わりに一意の行にしたいことです。たとえば、出力行は次のようになります。

Col. 1   Col. 2   Col. 3   Col. 4
xxxx     yyyy     zzzz     aaaa

代わりに、これを次のようにしたい:

Question    Answer
Col. 1      xxxx
Col. 2      yyyy
Col. 3      zzzz
Col. 4      aaaa

これに UNPIVOT 演算子を使用してみましたが、上記のことを行っていません。どうすればこれを達成できますか?

4

2 に答える 2

8

これにはUNPIVOTを使用できるはずです。

列の値をハードコーディングする静的ピボットを次に示します。

create table t1
(
    col1 varchar(5),
    col2 varchar(5),
    col3 varchar(5),
    col4 varchar(5)
)

insert into t1 values ('xxxx', 'yyyy', 'zzzz', 'aaaa')

select question, answer
FROM t1
unpivot
(
    answer
    for question in (col1, col2, col3, col4)
) u

drop table t1

これは、デモ付きのSQL Fiddleです。

ただし、動的アンピボットを使用することもできます。

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

select @cols = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('t1') and
               C.name like 'Col%'
         for xml path('')), 1, 1, '')

set @query = 'SELECT question, answer
            from t1
            unpivot 
            (
               answer
               for question in (' + @cols + ')
            ) p '

execute(@query)
于 2012-05-30T19:22:56.087 に答える
1

これは私のデータ名からのものですが、テスト済みです

select 'sID', sID as 'val' 
from [CSdemo01].[dbo].[docSVsys] 
where sID = 247   
union 
select 'sParID', sParID as 'val' 
from [CSdemo01].[dbo].[docSVsys] 
where sID = 247 ;

しかし、UNPIVOTは機能するはずです

于 2012-05-30T19:27:39.157 に答える