我有一个表,#t 有 16 行: id int description varchar(60) balance decimal(6,2)
我需要描述和余额数据,并且“从#t order by id 中选择描述,余额”将完成这项工作。但理想情况下,我可以水平而不是垂直显示结果。
现在我知道我可以构建一个包含 16 列的新表,并使用动态 sql 填充每个此类列的余额,但是,我也确信使用 pivot 或类似的东西可以更轻松地完成这一点 - 虽然我真的不明白怎么做。
有人可以启发我吗?
谢谢约翰
我有一个表,#t 有 16 行: id int description varchar(60) balance decimal(6,2)
我需要描述和余额数据,并且“从#t order by id 中选择描述,余额”将完成这项工作。但理想情况下,我可以水平而不是垂直显示结果。
现在我知道我可以构建一个包含 16 列的新表,并使用动态 sql 填充每个此类列的余额,但是,我也确信使用 pivot 或类似的东西可以更轻松地完成这一点 - 虽然我真的不明白怎么做。
有人可以启发我吗?
谢谢约翰
假设您使用的是 SQL Server,您可以实现PIVOT函数将数据行转换为列。基本语法将是:
select *
from
(
select description, balance
from yourtable
) d
pivot
(
sum(balance)
for description in ([desc1], desc2]) -- replace this with the names of your descriptions
) piv;
当然,如果您有未知数量的描述值,那么您将需要使用动态 SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(description)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + '
from
(
select description, balance
from yourtable
) x
pivot
(
sum(balance)
for description in (' + @cols + ')
) p '
execute sp_executesql @query