Sql server tsql中同一列上的多个轴

Sql server tsql中同一列上的多个轴,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,如何让pivot在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(st

如何让pivot在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从IN列表创建列名时,您不能两次定义像[1]一样的列。虽然下面的解决方案不是标准的,但它可能符合您的目的-

SELECT * FROM (
SELECT CAST(start_time AS DATE) AS [Date],
--Created the hour column twice for Pivoting twice
'Sales_' + CAST(DATEPART(hour,start_time) AS VARCHAR) AS [Hour_Sales], 
'NoSales_' + CAST(DATEPART(hour,start_time) AS VARCHAR) AS [Hour_NoSales], 
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_Sales] IN ([Sales_0], [Sales_1], [Sales_2], [Sales_3], [Sales_4], [Sales_5], [Sales_6], [Sales_7],
     [Sales_8], [Sales_9], [Sales_10],[Sales_11], [Sales_12], [Sales_13], [Sales_14], [Sales_15], [Sales_16], 
     [Sales_17], [Sales_18], [Sales_19], [Sales_20], [Sales_21], [Sales_22], [Sales_23])) AS DatePivot1

PIVOT( SUM([No Sales Count]) FOR [Hour_NoSales] IN ([NoSales_0], [NoSales_1], [NoSales_2], [NoSales_3], [NoSales_4], [NoSales_5], [NoSales_6], [NoSales_7],
     [NoSales_8], [NoSales_9], [NoSales_10],[NoSales_11], [NoSales_12], [NoSales_13], [NoSales_14], [NoSales_15], [NoSales_16], 
     [NoSales_17], [NoSales_18], [NoSales_19], [NoSales_20], [NoSales_21], [NoSales_22], [NoSales_23])) AS DatePivot2

如果没有样本数据和预期结果,我们就不能在这里猜测,但我更喜欢使用交叉表而不是PIVOT操作符的一个原因是,对于多个PIVOT,您不需要多次使用PIVOT。另外,另一方面,为什么是WITHNOLOCK?我想你理解使用它的含义,对吗?谢谢你让我来探索交叉表。我的所有列在[1]-[23]中对于每一行销售和NoSales都是相同的,这就是为什么我在它们中添加前缀sales&&NoSales,以获得预期的输出。当然,列名将不同于您的预期。