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...)查询语句只被调用一次,比如在上面的语句之前。

我想它会是这样的

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

如何加入该子选择并仅在连接为假的情况下进行拟合(返回 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

计算一个 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 回答