2013-03-11 79 views
0

我有一個sql聲明說如何避免在調用同一個SQL語句,並在

SELECT coalesce((Select sum(SomeNumber) 
FROM Table 
WHERE ID NOT IN (SELECT IDs...)), 0) MyFirstNumber, 
coalesce((Select sum(SomeNumber2) 
FROM Table 
WHERE ID NOT IN (SELECT IDs...)), 0) MySecondNumber 

我怎樣才能讓(SELECT IDs...)查詢語句只能調用一次,上面的語句之前說。

我認爲這會是這樣的

DECLARE @MyIDs 
SET @MyIDs = SELECT IDs FROM TABLE WHERE ... 

SELECT coalesce((Select sum(SomeNumber) 
FROM Table 
WHERE ID NOT IN (@MyIDs)), 0) MyFirstNumber, 
coalesce((Select sum(SomeNumber2) 
FROM Table 
WHERE ID NOT IN (@MyIDs)), 0) MySecondNumber 
+0

Select IDs是否返回單行或多行? – Ron 2013-03-11 18:39:10

+0

在你的例子中,兩個'SUM'函數都是針對'table'完成的......我假設這是一個人爲的例子,而且你的實際查詢是在兩個*不同的*表上執行SUM? – 2013-03-11 18:40:21

+0

您可以使用公用表表達式(CTE)來首先定義內部查詢:'WITH ctename AS()SELECT * FROM ctename'等等,以便您不必重複它。但至於執行計劃實際上會做什麼,你需要看看它。如果你希望首先將某個東西實際物化到一個表格中,唯一的方法就是自己去做。您已經完全忽略了這些內部查詢中的內容,因此很難知道它們是否需要關聯(您的外部查詢中也沒有FROM) – 2013-03-11 18:41:03

回答

1

怎麼樣與子選擇加入,只有fitering其中加入爲假(返回null)

SELECT sum(coalesce(SomeNumber,0)) MyFirstNumber 
     ,sum(coalesce(SomeNumber2,0)) MySecondNumber 
FROM Table 
     LEFT JOIN (SELECT IDs.. FROM Table) AS Filter ON Table.ID = Filter.ID 
WHERE Filter.ID IS NULL 
+0

如果我有一個不受ID限制的額外SELECT合併,這將如何工作? (選擇sum(SomeNumber))FROM表WHERE ID NOT IN(SELECT ID ...)),0)MyFirstNumber, coalesce((Select sum(SomeNumber2)FROM Table WHERE ID NOT IN(SELECT IDs。 ..)),0)MySecondNumber, coalesce((Select sum(SomeNumber3)FROM Table WHERE a = 1),0) 否則,我認爲這將工作,如果我把它分成兩個查詢調用 – masteroleary 2013-03-11 18:49:17

+0

如果額外選擇爲一個不同的標準..然後你不能用連接做...(至少這麼簡單),因爲它們會返回不同數量的行..並且總和也許不會是正確的.. – CaldasGSM 2013-03-11 21:19:02

0

在一個SELECT語句計算量

SELECT COALESCE(SUM(SomeNumber), 0) AS MyFirstNumber, 
     COALESCE(SUM(SomeNumber2), 0) AS MySecondNumber 
FROM Table 
WHERE ID NOT IN (SELECT IDs FROM TABLE WHERE...) 

如果需要不同的條件下,你可以使用CASE SUM()函數中的表達式

SELECT COALESCE(SUM(SomeNumber), 0) AS MyFirstNumber, 
     COALESCE(SUM(SomeNumber2), 0) AS MySecondNumber, 
     COALESCE(SUM(CASE WHEN ... THEN SomeNumber3 END), 0) AS MyThirdNumber 
FROM Table 
WHERE ID NOT IN (SELECT IDs FROM TABLE WHERE...) 
相關問題