小编Jer*_*ler的帖子

sql条件WHERE子句CASE WHEN

我正在尝试将一段数据分配一年的时间段.我可以使用两个日期字段进行子集化.首先,我应该在我的where子句中使用DATE1.如果是NULL,那么我需要使用DATE2.如果两者都是NULL,那么显然它们不符合条件.

注意:我不是SQL Server高手.我只是使用Ent.经理获得一些查询结果.我通常在SAS编程并且对TSQL感到满意,但我不知道SQL Server 2008带来的所有技巧.

SELECT count(CASE WHEN msg_fmt = 'ABC' then 1 END) as GRP1_CNT,
       count(CASE WHEN msg_fmt = 'LMN' then 1 END) as GRP2_CNT,
       count(CASE WHEN msg_fmt = 'XYZ' then 1 END) as GRP3_CNT,
FROM   msg_repository
WHERE  (CASE WHEN DATE1 IS NOT NULL then 
     DATE1 between '2010-01-01' and '2011-01-01'
    ELSE DATE2 between '2010-01-01' and '2011-01-01'
    END)
GROUP BY msg_fmt 
Run Code Online (Sandbox Code Playgroud)

因此,如果DATE1不为NULL,请使用该日期.如果为NULL,请使用DATE2.我更希望有一个只使用T-SQL的解决方案,因为该解决方案也可以在SAS中使用.但是,我现在会采取任何措施.

谢谢你的帮助.

sql t-sql sql-server-2008

2
推荐指数
1
解决办法
1729
查看次数

标签 统计

sql ×1

sql-server-2008 ×1

t-sql ×1