【发布时间】:2019-06-11 11:19:55
【问题描述】:
如何在 tsql 中的同一列上定义数据透视?
例如:
SELECT * FROM (
SELECT CAST(start_time AS DATE) AS [Date],
DATEPART(hour,start_time) AS [Hour],
Count(is_sale)AS [Sales Count]
,Count(is_not_sale)AS [No Sales Count]
FROM prov_sales WITH(NOLOCK)
GROUP BY CAST(start_time AS DATE), DATEPART(hour,start_time)) AS HourlySalesData
PIVOT( SUM([Sales Count]) FOR [Hour] IN ([0], [1], [2], [3], [4], [5], [6], [7],
[8], [9], [10],[11], [12], [13], [14], [15], [16],
[17], [18], [19], [20], [21], [22], [23])) AS DatePivot1
PIVOT( SUM([No Sales Count]) FOR [Hour] IN ([0], [1], [2], [3], [4], [5], [6], [7],
[8], [9], [10],[11], [12], [13], [14], [15], [16],
[17], [18], [19], [20], [21], [22], [23])) AS DatePivot2
我上面的 tsql 无法正常工作,因为小时列的值从 [1] 到 [23] 重复出现错误。
【问题讨论】:
-
没有样本数据和预期结果,我们不能只在这里猜测,但我更喜欢使用交叉表而不是
PIVOT运算符的一个原因是因为您不需要使用PIVOT多个枢轴不止一次。另外,换个说法,为什么要WITH(NOLOCK)?我假设您了解使用它的含义,对吗? -
谢谢你让我探索交叉表。
标签: sql-server tsql pivot