如果子查询具有自己的WHERE条件,那么子查询是否会忽略外部WHERE条件?

时间:2014-11-06 19:44:40

标签: sql sql-server subquery

我希望SQL查询遵循WHERE语句的条件,但子查询除外。在下面的示例中,我想获取上周的所有条目,但我希望子查询忽略该外部WHERE子句,但我不确定它将如何表现。

例如:

SELECT
ProductID,
SUM(CASE WHEN from_source = 'button' THEN 1 ELSE 0 END) 'Used Button',
(SELECT COUNT(*) FROM tracking WHERE from_source = 'button') 'Used Button to date'
FROM tracking
WHERE date_entered > (GETDATE() - 7)
GROUP BY ProductID

预期输出,第二列基于外部WHERE计算,子查询不查看外部WHERE:

ProductID |二手按钮|使用按钮到日期

123 | 5 | 102

456 | 8 | 175

1 个答案:

答案 0 :(得分:1)

您可以使用条件聚合编写查询:

select sum(case when date_entered > (GETDATE() - 7) then 1 else 0
           end) as UsedButton,
       count(*) as UsedButtonToDate
from tracking
where from_source = 'button';

这似乎是一种更简单的方法。

顺便说一句,您不应该对列别名使用单引号。使用不必转义的内容(如上所述)命名列或使用方括号。