2017-04-20 102 views
-2

当事件为“Regular”时,以下查询正在查找按对象计算的天数,但由于该对象属于指定日期范围,查询结果显示“Clearance”。有没有办法让这个查询只显示日期范围为4/10/2017的“Regular”事件通过Today的对象?我已经尝试了Event NOT IN C或S,并在where子句中移动事件,但获得了相同的结果。COUNT CASE语句返回不需要的查询结果

表1:

Cal_Date Object Event Time Stamp Time Stamp 
4/10/2017 Soap Regular  4/10/2017 4/10/2017 
4/11/2017 Soap Sale  4/11/2017 4/14/2017 
4/12/2017 Soap Sale  4/11/2017 4/14/2017 
4/13/2017 Soap Sale  4/11/2017 4/14/2017 
4/14/2017 Soap Sale  4/11/2017 4/14/2017 
4/15/2017 Soap Regular  4/15/2017 4/20/2017 
4/16/2017 Soap Regular  4/15/2017 4/20/2017 
4/17/2017 Soap Regular  4/15/2017 4/20/2017 
4/18/2017 Soap Regular  4/15/2017 4/20/2017 
4/19/2017 Soap Regular  4/15/2017 4/20/2017 
4/20/2017 Soap Regular  4/15/2017 4/20/2017 
4/10/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/11/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/12/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/13/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/14/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/15/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/16/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/17/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/18/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/19/2017 Shampoo Clearance 4/10/2017 12/31/2017 
4/20/2017 Shampoo Clearance 4/10/2017 12/31/2017 


SELECT 
    OBJECT 
    COUNT(CASE WHEN EVENT='Regular'AND CAL_DATE BETWEEN DATE '4/10/2017' AND CURRENT_DATE THEN 1 END) AS DAYS 
FROM TABLE 1 
GROUP BY 
    OBJECT 

查询结果:

Object Days 
Soap 7 
Shampoo ? 

期望的结果:

Object Days 
Soap 7 
+1

使用HAVING语句。 –

+1

我不知道teradata,但是不可能简单地将这些条件放在WHERE子句中,然后计数(*)?在Oracle中,这个工作正常:'选择OBJECT,从TEST_MYTABLE01计数(*)WHERE EVENT ='Regular'AND CAL_DATE BETWEEN to_date('10 .04.2017','dd.mm.yyyy')AND sysdate Group by OBJECT' – Demo

+0

您的结果'Shampoo?'不能被你的查询返回,它将是'Shampoo 0'。 – dnoeth

回答

-1

尝试此。

SELECT 
    [OBJECT] 
    ,REGULAR = SUM(CASE WHEN [EVENT] = 'Regular' AND CONVERT(DATE,Cal_Date) BETWEEN '2017-04-10' AND CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END) 
FROM 
    TABLE1 
GROUP BY 
    [OBJECT] 
+0

是REGULAR在OBJECT下应该是不同的东西?它不承认查询的那一部分。 – Hery0502