我正在SSMS 2008 R2中开发一个T-SQL查询,它只返回一行.但问题是,在这一行中有四个字段,我想要成为唯一的行.例如,我的输出行看起来像:
Col. 1 Col. 2 Col. 3 Col. 4
xxxx yyyy zzzz aaaa
Run Code Online (Sandbox Code Playgroud)
相反,我希望它看起来像:
Question Answer
Col. 1 xxxx
Col. 2 yyyy
Col. 3 zzzz
Col. 4 aaaa
Run Code Online (Sandbox Code Playgroud)
我已尝试使用UNPIVOT运算符,但它没有做上述操作.我怎样才能做到这一点?
你应该可以使用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
Run Code Online (Sandbox Code Playgroud)
这是一个带有演示的SQL小提琴.
但你也可以使用Dynamic Unpivot:
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)
Run Code Online (Sandbox Code Playgroud)