2017-04-19 12 views
0

日付と日付の間のアイテムによる合計日数を表示するCASEおよびCOUNTクエリを作成する方法を検索すると、2011年2月1日から4/19/2017になります。私は 'DATES'と 'BETWEEN'というキーワードの間に期待されるものを受け取りました。Teradata CASEおよびCOUNT構文エラー

表1:

ITEM Total days on sale 
Apple   2 
Banana   3 

現在のクエリ::私は探しています何

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 

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を表示する構文がありますか?またはnull?これらの項目が本当にnullではないことを確認しました... – Hery0502

0

DATESのチェックをWHERE句に移動するだけで済みます。
そして

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 

YESを合計クエリでの問題は、COUNT(DATES)のようなものがBETWEENまたは=のような基準では動作しますが、ではないだろうということでした。

関連する問題