【问题标题】:COUNT CASE statement returning unwanted query resultsCOUNT CASE 语句返回不需要的查询结果
【发布时间】:2017-09-17 15:53:08
【问题描述】:

以下查询是按对象查找事件为“常规”时的天数,但查询结果显示“清除”,因为该对象在指定的日期范围内。有没有办法让这个查询只显示在 2017 年 4 月 10 日到今天的日期范围内具有“常规”事件的对象?我尝试了 Event NOT IN C or S 并在 where 子句中移动 Event,但得到了相同的结果。

表 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

【问题讨论】:

  • 使用 HAVING 语句。
  • 我不知道 teradata,但不能简单地将这些条件放在 WHERE 子句中,然后 count(*) 吗?在 Oracle 中这工作正常:Select OBJECT, count(*) From TEST_MYTABLE01 WHERE EVENT='Regular' AND CAL_DATE BETWEEN to_date('10.04.2017','dd.mm.yyyy') AND sysdate Group by OBJECT
  • 您的查询无法返回您的结果Shampoo ?,而是Shampoo 0
  • Teradata 中略有不同的语法是(因为 OBJECT 是保留字,您必须引用它。考虑更改列名)select "OBJECT", count(*) from Table1 where EVENT = 'Regular' and CAL_DATE between '2017-04-10'(date) and current_date Group by "OBJECT";

标签: sql count case teradata


【解决方案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]

【讨论】:

  • OBJECT 下的 REGULAR 应该是不同的东西吗?它无法识别查询的那一部分。
猜你喜欢
  • 2015-11-19
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多