【发布时间】:2020-06-05 10:25:17
【问题描述】:
我有一个名为 balance 的表,我希望对其进行转置,但这非常困难,因为列名将标记为 1、2、3,并且余额将按每个客户的降序排序。
这是当前表格的截图:
还有数据透视表:
我查看了其他视频并发布了,但我没有找到与我目前的情况相匹配的解决方案。所以最终结果将是客户将按 asc 排序,余额将按 desc 排序。因此,对于客户 3,最高余额 500 将放在第 1 列中,300 在第 2 列中,250 在第 3 列中。
创建示例数据的脚本:
select Customer, Balance
into #a
from (
values
(1, 250),
(2, 500),
(1, 205),
(2, 600),
(2, 700),
(3, 300),
(3, 500),
(3, 250)
) v (Customer, Balance)
【问题讨论】:
-
另外请不要使用图片,使用格式化文本。
-
@daleK SQL SSMS
-
仅供参考:SSMS 不是 RDBMS,它是 SQL Server 的客户端接口。
-
简短回答:你不能。 T-SQL 不支持运行时定义或参数化的标识符(如列名)。您必须使用 Dynamic-SQL(请不要)或在应用程序代码中执行 PIVOT。如果您需要在 SQL Server 中处理透视数据,请仅使用带有
PIVOT/UNPIVOT的动态 SQL。 -
好的@Dai。我知道在这种情况下我必须使用动态 SQL。我的问题是如何将值按降序传递到列表 [1]、[2]、[3] 的列?如果例如客户 2,只有 2 个条目,那么 0 将被放置在第 3 列中。
标签: sql-server tsql pivot-table ssms ssms-2017