0

我有一个表,#t 有 16 行: id int description varchar(60) balance decimal(6,2)

我需要描述和余额数据,并且“从#t order by id 中选择描述,余额”将完成这项工作。但理想情况下,我可以水平而不是垂直显示结果。

现在我知道我可以构建一个包含 16 列的新表,并使用动态 sql 填充每个此类列的余额,但是,我也确信使用 pivot 或类似的东西可以更轻松地完成这一点 - 虽然我真的不明白怎么做。

有人可以启发我吗?

谢谢约翰

4

1 回答 1

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
于 2013-07-11T23:10:37.990 回答