2013-12-10 36 views
1

考慮:​​試圖讓數據以圖表準備

TopProducts table 
------------------ 
Name, Count, Choice 
WidgetA, 3, Pick1 
WidgetB, 1, Pick1 
WidgetB, 1, Pick2 
WidgetC, 1, Pick2 
WidgetA, 1, Pick3 
WidgetD, 3, Pick3 

我想獲得的數據準備,如果可能的圖表。該圖表將根據選擇有多個系列。我想數據應該是這樣的:

WidgetA, 3, Pick1 
WidgetB, 1, Pick1 
WidgetC, null, Pick1 
WidgetD, null, Pick1 
WidgetA, null, Pick2 
WidgetB, 1, Pick2 
WidgetC, 1, Pick2 
WidgetD, null, Pick2 
WidgetA, 1, Pick3 
WidgetB, null, Pick3 
WidgetC, null, Pick3 
WidgetD, 3, Pick3 
+0

你在做什麼類型的圖表?你打算用什麼工具創建圖表?問題是什麼? – Anssssss

回答

1

你需要得到唯一值的笛卡爾積上列:NameChoice能夠得到所有可能的組合。

笛卡爾產品的結果將通過表格使用LEFT JOIN加入以得到Count的值。

SELECT DISTINCT 
     b.Name, 
     c.Count, 
     a.Choice 
FROM (SELECT DISTINCT Choice FROM TopProducts) a 
     CROSS JOIN (SELECT DISTINCT Name FROM TopProducts) b 
     LEFT JOIN TopProducts c 
      ON a.Choice = c.Choice 
       AND b.name = c.Name 
ORDER BY a.Choice, b.Name 

輸出

╔═════════╦════════╦════════╗ 
║ NAME ║ COUNT ║ CHOICE ║ 
╠═════════╬════════╬════════╣ 
║ WidgetA ║ 3  ║ Pick1 ║ 
║ WidgetB ║ 1  ║ Pick1 ║ 
║ WidgetC ║ (null) ║ Pick1 ║ 
║ WidgetD ║ (null) ║ Pick1 ║ 
║ WidgetA ║ (null) ║ Pick2 ║ 
║ WidgetB ║ 1  ║ Pick2 ║ 
║ WidgetC ║ 1  ║ Pick2 ║ 
║ WidgetD ║ (null) ║ Pick2 ║ 
║ WidgetA ║ 1  ║ Pick3 ║ 
║ WidgetB ║ (null) ║ Pick3 ║ 
║ WidgetC ║ (null) ║ Pick3 ║ 
║ WidgetD ║ 3  ║ Pick3 ║ 
╚═════════╩════════╩════════╝ 
+0

你也可以使用'GROUP BY'來獲得唯一的行。 http://sqlfiddle.com/#!6/86bef/4 –

+0

http://sqlfiddle.com/#!6/86bef/7 - 所以如果我想旋轉數據,我會附加到你給的東西上?例如,在名稱旁邊和頂部的選項 – Rod