2014-09-19 100 views
1

我有一個存儲過程如下。將兩個不同的查詢合併爲1

DECLARE @Temp TABLE 
(...) 

INSERT INTO @Temp 
SELECT MeasureDate, col1, col2 
FROM Table1 
WHERE Col3 = 1 

INSERT INTO @Temp 
SELECT MeasureDate, col1, col2 
FROM Table1 
WHERE Col3 = 1 
AND Col4 = 7000 

SELECT SUM(col1)/SUM(col2) AS Percentage, MAX(), MeasureDate 
FROM @Temp 
GROUP BY MeasureDate 

我做兩插入到臨時表中,有一個額外的第二個地方插入,但相同的列相同的表,那我就在臨時表SUM(COL1)/ SUM(COL2)返回的結果,我需要。有沒有辦法將所有這些插入和選擇合併到一個語句中,因此我不使用臨時表並從Table1執行單個選擇?或者,即使我仍然需要臨時表,將選擇合併到一個選擇而不是兩個單獨的選擇?存儲過程正常工作,只是尋找縮短它的方法。

謝謝。

+0

有可能做到這一點,但你最好給一些更多的細節。目前還不清楚爲什麼要將重複數據放入臨時表中,如果這是需求或錯誤,並且在構建查詢時會產生巨大差異。 – Paolo 2014-09-19 13:09:06

+0

你是對的,我糾正了查詢,兩個查詢是不同的,一個是col3 = 2,另一個是col3 = 1和col4 = 7000。這不是重複的數據 – artm 2014-09-19 13:14:47

回答

2
SELECT MeasureDate, col1, col2 
FROM Table1 
WHERE Col3 = 2 
    or (Col3 = 1 AND Col4 = 7000); 


SELECT sum(col1)/sum(col2) AS Percentage , GROUP BY MeasureDate 
FROM Table1 
WHERE Col3 = 2 
    or (Col3 = 1 AND Col4 = 7000) 
GROUP BY MeasureDate; 
1

你可以只用一個or操作相結合的條件前兩個疑問:

SELECT SUM(col1)/SUM(col2) AS Percentage, MeasureDate 
FROM  Table1 
WHERE (Col3 = 2) OR (Col3 = 1 AND Col4 = 7000) 
GROUP BY MeasureDate