sql-server-2008 - 一个选择语句中的不同条件

如何选择两列并让每一列测试其自身的条件而不是其他的?

假设我有一个选择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/

相关文章:

php - Uniqid 每次返回相似的值

string - 将字符串/字符转换为 uint8

groovy - Groovy 中的 JUnit @Before 方法排序

variables - Makefile 字符串变量

sql - 如何优化此 SQL 查询(使用索引)?

sql - 减去 vs 删除 oracle 中存在的地方

caching - 什么是暖缓存?

sql - 存储过程返回的别名列 [SQL Server 2008]

regex - 检查目录是否存在递归地反转路径

css - 向右浮动和小时对齐