如何选择
两列并让每一列测试其自身的条件而不是其他的?
假设我有一个选择Count
表中的每条记录。在一列中,我想要本周的所有记录,在第二列中,我想要自年初以来的所有记录。
我有两个条件,但它们都适用于特定的列:
WHERE date BETWEEN @Monday AND @SUNDAY /* Weekly */
WHERE date >= @JanuaryFirst /* Annual */
但是不能这样说,因为我只会在这两个栏目中获得本周的记录。我想我可以使用 IF
条件,但我不认为我可以简单地说“如果你是列 A 测试这个,如果不是测试第二个”。
最佳答案
这是一个不产生多次扫描的版本:
select vehicule,
weekly = SUM(CASE WHEN date BETWEEN @Monday AND @SUNDAY THEN 1 ELSE 0 END),
annual = SUM(CASE WHEN date >= @JanuaryFirst THEN 1 ELSE 0 END)
from dbo.tablename AS t
GROUP BY vehicule;
或者您也可以尝试稍微不那么冗长的方式:
select vehicule,
weekly = COUNT(CASE WHEN date BETWEEN @Monday AND @SUNDAY THEN 1 END),
annual = COUNT(CASE WHEN date >= @JanuaryFirst THEN 1 END)
from dbo.tablename AS t
GROUP BY vehicule;
https://stackoverflow.com/questions/11207813/