2014-08-29 85 views
0

我創建一個ReportViewer與VB.NET連接到一個MySQL數據庫。數據如下所示。MySQL總結和案例查詢

IdProduct  Quantity  TotalPrice  OrderDate 
    0001    1    10   29/09/2014 
    0002    2    40   29/09/2014  
    0001    4    40   29/09/2014  
    0001    2    20   29/09/2014  
    0001    2    20   29/09/2014  

基於以上的記錄,我想結果出現類似下面

0001 0002 
    9  2 
    90  40 

什麼是查詢總和案例這裏最好用?提前致謝。

+0

僅當IdProduct被限制爲2時纔有可能?我猜不是,你後面的結果集可以在你的應用程序級代碼 – 2014-08-29 16:29:53

回答

0

注:爲查詢「動態」改變數或列的數據類型退回,這些必須在SQL文本進行解析時,指明這是不可能的。

要與查詢返回結果集指定的,你可以做這樣的事情:

SELECT SUM(IF(t.IdProduct='0001',t.Quantity,NULL)) AS `0001` 
    , SUM(IF(t.IdProduct='0002',t.Quantity,NULL)) AS `0002` 
    FROM mytable t 
UNION ALL 
SELECT SUM(IF(t.IdProduct='0001',t.TotalPrice,NULL)) AS `0001` 
    , SUM(IF(t.IdProduct='0002',t.TotalPrice,NULL)) AS `0002` 
    FROM mytable t 

注意,由兩個查詢返回的數據類型將需要兼容。如果QuantityTotalPrice都被定義爲整數,這將不成問題。

此外,沒有具體保證「數量」行將在「TotalPrice」行之前;我們觀察到這種行爲,它不可能會有所不同。但是,爲了保證,我們需要一個ORDER BY條款。因此,包括一個額外的鑑別器列(每個查詢的SELECT列表中的一個字面值),這會給我們一些東西,我們可以ORDER BY。

請注意,此單個查詢不可能爲IdProduct'0003'動態創建另一列。我們需要將其添加到每個查詢的SELECT列表中。

我們可以通過兩個步驟完成此操作,使用查詢獲取不同的IdProduct列表,然後使用它來動態創建我們需要的查詢。


但......對於所有的說......我們想這樣做。

規範模式將返回QuantityTotalPrice作爲兩個單獨的列,以及作爲另一列的IdProduct。例如,結果這個語句返回:

SELECT t.IdProduct 
    , SUM(t.Quantity) AS `Quantity` 
    , SUM(t.TotalPrice) AS `TotalPrice` 
    FROM mytable t 
GROUP BY t.IdProduct 

然後客戶端應用程序將負責改造該ResultSet到所需的顯示錶現。

我們不希望將該作業(將結果轉換爲顯示錶示形式)推送到SQL中。

+0

哦,天啊..非常感謝。我的問題解決了 – Dya 2014-08-29 16:49:30

0
select idproduct, sum(quantity), sum(totalprice) 
from your_table 
group by idproduct 
+0

處理得最好。這是隻顯示結果的查詢。我想將IdProduct設置爲ColumnName – Dya 2014-08-29 16:09:42

+0

這是一個表示問題,應該在您的邏輯中更好地處理。 – 2014-08-29 16:14:59

+0

如果您有新的問題,請點擊[Ask Question](問問題)(http://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 – Elwinar 2014-08-29 16:26:44