Jer*_*ler 2 sql t-sql sql-server-2008
我正在尝试将一段数据分配一年的时间段.我可以使用两个日期字段进行子集化.首先,我应该在我的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中使用.但是,我现在会采取任何措施.
谢谢你的帮助.
你可以使用coalesce:
where coalesce(date1,date2) between '2010-01-01' and '2011-01-01'
Run Code Online (Sandbox Code Playgroud)