0

我需要制作一个数据透视表。我有 3 列(组织名称、工作日(周一至周日)和操作(销售、购买、创建、销毁等)),如何创建数据透视表,以便显示每个组织每个工作日的每个操作的计数?

这是我能得到的最接近的:

SELECT *
FROM [AdventureWorksDW2012].[dbo].[Testine]
PIVOT (COUNT (Tipas) 
       FOR Diena 
       IN 
       ([Monday],[Tuesday],[Wednesday],[Thursday],[Friday],[Saturday],[Sunday])) 
       AS KiekiaiPerDiena

它显示每个组织每天的总操作数,所以我基本上需要扩展以显示每个操作的计数,而不是总操作数。

4

1 回答 1

0

这是使用COUNTwith的一种方法CASE- 难以PIVOT用于此类功能。

SELECT 
  Org,
  COUNT(CASE WHEN Tipas = 'buy' AND Diena = 'Monday' THEN 1 END) Monday_Buy_Cnt,
  COUNT(CASE WHEN Tipas = 'sell' AND Diena = 'Monday' THEN 1 END) Monday_Sell_Cnt,
  COUNT(CASE WHEN Tipas = 'create' AND Diena = 'Monday' THEN 1 END) Monday_Create_Cnt,
  COUNT(CASE WHEN Tipas = 'buy' AND Diena = 'Tuesday' THEN 1 END) Tuesday_Buy_Cnt,
  COUNT(CASE WHEN Tipas = 'sell' AND Diena = 'Tuesday' THEN 1 END) Tuesday_Sell_Cnt,
  COUNT(CASE WHEN Tipas = 'create' AND Diena = 'Tuesday' THEN 1 END) Tuesday_Create_Cnt,
  ...
FROM Testine T
GROUP BY Org

SQL 小提琴演示

然后您可以相应地添加其余的操作/天。有点长,但应该工作。

如果您需要每个组织每个操作多行,则将其添加到您的 group by 并从 CASE 语句中删除。例如:

SELECT 
  Org,
  Tipas,
  COUNT(CASE WHEN Diena = 'Monday' THEN 1 END) Monday_Cnt,
  COUNT(CASE WHEN Diena = 'Tuesday' THEN 1 END) Tuesday_Sell_Cnt,
  ...
FROM Testine T
GROUP BY Org, Tipas

另一个小提琴

于 2013-05-25T23:21:16.077 回答