我有一张桌子,#t有16行: id int description varchar(60) 余额十进制(6,2)
我需要描述&平衡数据,“选择描述,按ID排序#t”将完成工作。但理想情况下,我可以水平而不是垂直显示结果。
现在我知道我可以构建一个包含16列的新表,并使用大量动态sql为每个这样的列填充余额,但是,我也确信使用pivot或类似的东西可以更轻松地完成这项工作。那 - 虽然我真的不明白怎么做。
有人可以请我注意吗?
由于 约翰
答案 0 :(得分:4)
假设您使用的是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