2013-06-20 21 views
0

讓我們來簡單的查詢存儲過程:取行與總結resilts並將其放置在輸出參數

SELECT SUM(Field1), Field2 FROM TableName GROUP BY Field2 

在我來說,我知道一個事實,即有MAX爲FIELD2 5個不同的值(1-5 ),因此該查詢將返回最多5行(如果例如沒有Field2值= 2的記錄,則可能會更少)。

我感興趣的是根據它所屬的Field2值將值SUM(field1)存儲到OUTPUT參數中。目前我從存儲過程(簡化)這樣做:

SELECT @prm1 = SUM(Field1) FROM TableName WHERE Field2=1 
SELECT @prm2 = SUM(Field1) FROM TableName WHERE Field2=2 
SELECT @prm3 = SUM(Field1) FROM TableName WHERE Field2=3 
SELECT @prm4 = SUM(Field1) FROM TableName WHERE Field2=4 
SELECT @prm5 = SUM(Field1) FROM TableName WHERE Field2=5 

有沒有更好的方法來實現這一目標?

編輯:此存儲過程正在執行超過10個查詢並從每個查詢獲取摘要。我已經決定不要與客戶端分開執行10多個不同的查詢,但將它們放在一個存儲過程中,然後通過輸出參數返回結果。這些查詢不會有單獨調用它們的目的,只能作爲批處理。但是,如果您認爲這不是一個好主意,我會傾聽您的觀點。

+0

爲什麼它必須是一個輸出參數?爲什麼不只是返回'SELECT'的結果集呢?你需要在你的問題中包含你如何使用這些輸出。 – EkoostikMartin

+0

因爲我正在計算大約12-15個彙總值並將它們返回給我的應用程序。因此,我不是從我的應用程序執行12個不同的查詢,而是通過一個存儲過程執行它們,並通過輸出參數將結果傳遞給應用程序。 – Goran

回答

0

你可以做到這一點的條件SUM()

SELECT @prm1 = SUM(CASE WHEN field2 = 1 THEN field1 ELSE NULL END), 
     @prm2 = SUM(CASE WHEN field2 = 2 THEN field1 ELSE NULL END), 
     @prm3 = SUM(CASE WHEN field2 = 3 THEN field1 ELSE NULL END), 
     @prm4 = SUM(CASE WHEN field2 = 4 THEN field1 ELSE NULL END), 
     @prm5 = SUM(CASE WHEN field2 = 5 THEN field1 ELSE NULL END) 
    FROM Table1 

這裏是SQLFiddle演示