2017-04-19 121 views
0

寻找如何编写CASE和COUNT查询,该查询将显示日期2017年2月1日 - 2017年4月19日期间按项目显示的总天数。我收到'期望'DATES'和'BETWEEN'关键字之间的内容。Teradata CASE和COUNT语法错误

表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 

回答

0

我想你想要有条件聚集:

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; 
+0

'THEN/ELSE'部分缺失... – dnoeth

+0

@dnoeth - 我假设THEN为1? – Hery0502

+0

@Gordon Linoff - 我有一个比我上面提供的更大的数据集,有些销售日期为0的项目正在显示一个?而不是0.是否有一个语法可以显示0而不是?或空?我检查以确保这些项目真的不为空... – Hery0502

0

您可以将DATES上的该检查移至WHERE子句。
和SUM的是

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(日期)会工作,但不会像之间或=一个标准。