2015-02-06 33 views
3

我有一個小小的SQL任務來實現,但說實話我不知道如何處理它。SQL - 添加額外的行到結果集

考慮下表:

**Product ID | Product Name | Product Cat | Price | Amount Sold** 
1   | product 1 | cat1  | 0.10 | 1000 
2   | product 2 | cat1  | 0.50 | 10 
....   | .....  | ......  | ... | .... 
500   | .....  | .......  | ... | .... 
501   | ......  | .......  | .... | ..... 
....   | .......  | ......  | ..... | ..... 

對於做銷售報告,我有一個SQL查詢將選擇所有產品,所有求和賣出金額場,並計算爲銷售產品的總體積。現在我要求做到以下幾點:

對於一些特定的產品ID(FE 500,501),我將「添加一行」到結果集其內容如下:

**Product ID | Product Name | Product Cat | Price | Amount Sold** 
....   | .....  | ......  | ... | .... 
500   | .....  | .......  | ... | .... 
501   | ......  | .......  | .... | ..... 
xxx   | Sum   | ......  | Total | Total 
.....  | ........  | ........ | ..... | ..... 

怎麼可能我做到了?我是否需要連接多個select語句,或者是否有一種彙總的方式來按照certrain產品id進行分組?

在此先感謝。

+0

此查詢如何使用?如果您在報告系統中使用它,爲什麼不讓報告工具處理小計? – qxg 2015-02-06 11:18:40

+0

你如何確定你想總結的ID? – flo 2015-02-06 11:22:30

+0

這是可以在表示層完成的事情,爲什麼在數據庫中? – 2015-02-06 12:09:09

回答

4

正如評論中的其他人所指出的那樣,報告解決方案本身處理這類邏輯更合理,即使該軟件與Excel一樣簡單。但是,如果我正確理解您的要求,則可以使用兩個SELECT查詢中的UNION;但是,如果我正確理解了您的要求,則可以使用兩個SELECT查詢中的一個UNION;

有點像;

SELECT ProductID, ProductName, ProductCat, Price, AmountSold 
FROM YourTable 

UNION ALL 

SELECT 0, 'Sum of 1 & 2', 0, SUM(Price), SUM(AmountSold) 
FROM YourTable 
WHERE (ProductID = 1 OR ProductID = 2); 

這假設您的總和等將匹配或可轉換爲原始列的數據類型。 UNION ALL的使用性能更好,並且在不太可能發生所有列值與現有行匹配的情況下防止刪除新行。

我希望這會有所幫助。

+1

感謝Rudi - 這工作得很好!我知道這是一個骯髒的黑客,但不希望它在他們的Excel表單,他們只是想運行查詢並看看。謝謝! – madhippie 2015-02-06 14:44:13

相關問題