2017-04-19 133 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(日期)會工作,但不會像之間或=一個標準。