基于事务计数的MySql数据透视表

时间:2017-07-14 15:42:43

标签: mysql sql stored-procedures pivot-table aggregate

我被要求创建一个报告,显示各个成员的交易数据,并显示他们进行相同类型交易的频率。

例如:

  来自X组织的鲍勃10日一次购买了5个香蕉   来自同一组织的不同场合/交易和Bob   已经在20种不同的地方同时购买了3个香蕉   场合/交易。

数据库包含此表格中的交易数据

|TransactionID | Organization | MemberNumber | ItemID| QuantityPurchased 

我目前有一个查询,它以下列格式创建临时表。

|Organization | MemberNumber | ItemID | QuantityItemsPurchased | QuantityOfTransactions
----------------------------------------------------------------------------------------
|Company X    | 2044         | B2     | 5                      | 10
|Company X    | 2044         | B2     | 3                      | 20
|Company Y    | 2035         | A3     | 5                      | 5

我被要求以下列格式创建报告(报告的格式不适合我辩论),其中每个数字列是具有该销售数量的交易,每行的值是销售该数量的商品的交易数量。

|Organization | MemberNumber | ItemID |1  |2  |3  |4  |5  |6+ |
-----------------------------------------------------------------
|Company X    | 2044         | B2     |0  |0  |20 |0  |10 |0  |
|Company Y    | 2035         | A3     |0  |0  |0  |0  |5  |0  |

我不确定如何编写可以将 quantityOfItemsPurchased 排序到单个列中并显示 QuantityOfTransactions 值的查询。

我尝试编写类似于下面的查询,但它对我不起作用,因为它只是在所有数字列下给出值1或0而不是实际的 QuantityOfTransactions 值。

Select Organization, MemberNumber, ItemId,
count(Case when tempTable.quantityOfItemsPurchased = 1 then tempTable.QuantityOfTransactions  end) as '1',
count(Case when tempTable.quantityOfItemsPurchased = 2 then tempTable.QuantityOfTransactions  end) as '2',
count(Case when tempTable.quantityOfItemsPurchased = 3 then tempTable.QuantityOfTransactions  end) as '3',
count(Case when tempTable.quantityOfItemsPurchased = 4 then tempTable.QuantityOfTransactions  end) as '4',
count(Case when tempTable.quantityOfItemsPurchased = 5 then tempTable.QuantityOfTransactions  end) as '5',
count(Case when tempTable.quantityOfItemsPurchased >= 6 then tempTable.QuantityOfTransactions  end) as '6+'
from TempTable group by Organization, MemberNumber, ItemId

1 个答案:

答案 0 :(得分:1)

你需要这样的东西:

SELECT Organization, MemberNumber, ItemID,
       SUM(CASE WHEN QuantityItemsPurchased = 1 
           THEN QuantityOfTransactions ELSE 0 END) As `1`,
       SUM(CASE WHEN QuantityItemsPurchased = 2 
           THEN QuantityOfTransactions ELSE 0 END) As `2`,
       SUM(CASE WHEN QuantityItemsPurchased = 3 
           THEN QuantityOfTransactions ELSE 0 END) As `3`,
       SUM(CASE WHEN QuantityItemsPurchased = 4 
           THEN QuantityOfTransactions ELSE 0 END) As `4`,
       SUM(CASE WHEN QuantityItemsPurchased = 5 
           THEN QuantityOfTransactions ELSE 0 END) As `5`,
       SUM(CASE WHEN QuantityItemsPurchased >= 6 
           THEN QuantityOfTransactions ELSE 0 END) As `6+`
FROM Table1
GROUP BY Organization, MemberNumber, ItemID

演示:SQL Fiddle