0

私は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...)上記のステートメントの前に、クエリステートメントを1回だけ呼び出すようにするにはどうすればよいですか。

こんな感じになると思います

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
4

2 に答える 2

1

その副選択で結合し、結合がfalse(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
于 2013-03-11T18:43:29.817 に答える
0

1つの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...)

異なる条件が必要な場合は、SUM()関数内でCASE式を使用できます

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...)
于 2013-03-11T20:51:19.080 に答える