2017-07-14 85 views
0

我被要求創建一個報告,顯示單個成員的交易數據並顯示他們多久進行一次相同類型的交易。基於交易次數的MySql數據透視表

例如:

鮑勃從組織X購買5個香蕉同時對10 不同場合/交易和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 
+0

這種事情是在應用程序代碼中那麼容易。 :-( – Strawberry

+0

草莓,同意這樣會更容易一些,但我們試圖將這些報告與應用程序分開,因爲銷售/管理總是要求修改報告,而且不得不不斷地發佈新版本每次發生這種情況,不幸的是我的數據庫知識是有限的,但它是這樣的, – Jcross

回答

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

+0

krokodilko, 這似乎很接近,但它與我正在嘗試做的事情相反,請參閱我的問題的最後一個表,看看是什麼最終結果應該如下所示: 您的答案是切換quantityItemsPurchased和quantityOfTransactions。我正在嘗試使用您提供的示例來查看我是否可以想出可行的方法 – Jcross

+0

krokodilko,切換查詢中的列名似乎可以做到這一點,請參閱http:// sqlfidd le.com/#!9/da1427/18 – Jcross