Teradata CASE 和 COUNT 语法错误

Teradata CASE and COUNT syntax error

寻找如何编写一个 CASE 和 COUNT 查询,以显示 2017 年 2 月 1 日至 2017 年 4 月 19 日期间按项目分类的总销售天数。我收到“预期 'DATES' 和 'BETWEEN' 关键字之间的内容。

Table 1:

ITEM    SALE    DATES
Apple   Yes   4/19/2017
Apple   Yes   2/18/2017
Apple   Yes   1/17/2017
Apple   no    3/16/2017
Apple   no    4/17/2017
Banana  Yes   4/19/2017
Banana  Yes   2/18/2017
Banana  Yes   1/17/2017
Banana  Yes   3/16/2017
Banana  no    4/17/2017

我在找什么:

ITEM    Total days on sale
Apple          2
Banana         3

当前查询:

SELECT
    ITEM,
    CASE WHEN SALE='YES' THEN COUNT(DATES BETWEEN '2/1/2017' AND '4/19/2017') END AS TOTAL_DAYS_ON_SALE_DAYS
FROM TABLE 1
GROUP BY 
    ITEM
ORDER BY 
    ITEM ASC

我想你想要条件聚合:

SELECT ITEM,
       SUM(CASE WHEN SALE = 'YES' AND DATES BETWEEN DATE '2017-02-01' AND DATE '2017-04-19'
                THEN 1 ELSE 0
           END) AS TOTAL_DAYS_ON_SALE_DAYS
FROM TABLE 1
GROUP BY ITEM
ORDER BY ITEM ASC;

您可以将对 DATES 的检查移至 WHERE 子句。
并总结 YES

SELECT
ITEM,
SUM(CASE 
WHEN SALE = 'Yes' 
THEN 1 
ELSE 0 
END) AS TOTAL_DAYS_ON_SALE_DAYS
FROM TABLE 1
WHERE DATES BETWEEN '2/1/2017' AND '4/19/2017'
 GROUP BY ITEM
 ORDER BY ITEM ASC

您的查询的问题是像 COUNT(DATES) 这样的东西可以工作,但不能使用像 BETWEEN 或 = 这样的条件。