使用多个案例条件

时间:2018-03-22 00:39:09

标签: sql sql-server tsql

所以我使用Date_Year和Date_month列收集了3个月的间隔但有一些问题

例如,第一组是2016年10月至12月,这很好。第二组是我在2016年11月至12月以及2017年1月遇到麻烦的那一组。

以下是示例代码:

SELECT
  [2016_Oct_Dec]    = SUM(CASE WHEN date_year = 2016 AND date_month IN 
                     (10,11,12) THEN Sales_amt END )
, [2016/17_Nov_Jan] = SUM(CASE WHEN (date_year = 2016 AND date_month IN 
                     (11,12)) AND ((date_year = 2017 AND date_month = 1)) 
                     THEN Sales_amt END )
From Sales

我试图创造两个条件(2016年11月至12月)和(2017年1月),但没有运气。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:4)

date_year不能是20162017。 尝试使用OR代替AND

SUM(CASE WHEN (date_year = 2016 AND date_month IN 
                     (11,12)) OR (date_year = 2017 AND date_month = 1) 
                     THEN Sales_amt END )

这是[DEMO]

测试设置:

WITH Sales AS(
    SELECT *
    FROM (VALUES ('2016','08',100),
                 ('2016','10',100), --Capture in 1st CASE
                 ('2016','11',100), --Capture in 1st CASE  --Capture in 2nd CASE
                 ('2016','12',100), --Capture in 1st CASE  --Capture in 2nd CASE
                 ('2017','1',100),  --Capture in 2nd CASE
                 ('2017','1',100),  --Capture in 2nd CASE
                 ('2017','1',100),  --Capture in 2nd CASE
                 ('2018','2',100)) T(date_year, date_month, sales_amt))

--Expect 300, 500
--Instead use OR
SELECT
  [2016_Oct_Dec]    = SUM(CASE WHEN date_year = 2016 AND date_month IN 
                     (10,11,12) THEN Sales_amt END )
, [2016/17_Nov_Jan] = SUM(CASE WHEN (date_year = 2016 AND date_month IN 
                     (11,12)) OR ((date_year = 2017 AND date_month = 1)) 
                     THEN Sales_amt END )
From Sales

enter image description here

答案 1 :(得分:1)

SELECT
  [2016_Oct_Dec]    = SUM(CASE WHEN date_year = 2016 AND date_month IN 
                     (10,11,12) THEN Sales_amt END )
, [2016/17_Nov_Jan] = SUM(CASE WHEN (date_year = 2016 AND date_month IN 
                     (11,12)) OR ((date_year = 2017 AND date_month = 1)) 
                     THEN Sales_amt END )
From Sales

date_year不能是2016年和2017年。它应该是2016年或2017年[2016 / 17_Nov_Jan]