Tsql 如何将单行SQL结果转换为多行?
我正在SSMS 2008 R2中开发一个T-SQL查询,它只返回一行。但问题是,在这一行中有四个字段,我希望它们是唯一的行。例如,我的输出行如下所示:Tsql 如何将单行SQL结果转换为多行?,tsql,unpivot,Tsql,Unpivot,我正在SSMS 2008 R2中开发一个T-SQL查询,它只返回一行。但问题是,在这一行中有四个字段,我希望它们是唯一的行。例如,我的输出行如下所示: 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 我已经尝试过
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操作符来实现这一点,但它并没有实现上述功能。我如何才能做到这一点?您应该能够使用:
这是一个静态透视图,您可以在其中硬编码列的值:
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
这里有一个演示
但您也可以使用动态取消PIVOT:
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)
您应该能够为此使用:
这是一个静态透视图,您可以在其中硬编码列的值:
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
这里有一个演示
但您也可以使用动态取消PIVOT:
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)
这是我的数据名,但经过测试
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应该可以工作这是我的数据名,但经过测试
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应该有效你说它不做上述工作是什么意思?这正是UNPIVOT的目的。你到底尝试了什么?它到底是如何不起作用的?也许只是读一下这里的例子,你说它不做上述工作是什么意思?这正是UNPIVOT的目的。你到底尝试了什么?它到底是如何不起作用的?也许只需阅读这里的示例