2017-12-08 38 views
0

お客様の誕生日を使用して、以下の各年齢グループにカウントを取得したいと考えています。顧客はまた、特定の条件を満たす必要があります。私は2つのテーブルを使用する必要があります。生年月日を使用している年齢グループ

次の表と列を使用して
18 to 25 
26 to 35 
36 to 45 
46 to 55 
56 to 65 
65 and over 

BRTH_DT - birthday 
MSTR_CUST - customer table where BRTH_DT is 
MSTR_ACT - account table where BR_CD is 
BR_CD - code , I want to include all customer with code like '%00%' 
CUST_ODT - customer open date from customer table, I want to include dates between '2017-11-01' and '2017-11-30' 

私はいくつかの構文を試してみましたが、それは動作しません。私はHadoopを使用しています。

問合せ:

SELECT (
    CASE 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 18 AND 25 
     THEN '18-25' 
    ELSE 
     CASE 
     WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 26 AND 35 
      THEN '26-35' 
     ELSE 
      CASE 
      WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 36 AND 45 
       THEN '36-45' 
      ELSE 
       CASE 
       WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 46 AND 55 
        THEN '46-55' 
       ELSE 
        CASE 
        WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 56 AND 65 
         THEN '56-65' 
        ELSE 
         CASE 
         WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) > 65 
          THEN '65andOver' 
    END) from MSTR_ACCT_A JOIN MSTR_CUST B 
    where B.CUST_ODT between '2017-11-01' and '2017-11-30' and A.BR_CD like '%00%'; 
+0

こんにちはramonesfan、あなたの質問を改善するために、あなたの質問には機能していない質問を含める必要があります。何がうまくいかないか説明してください。エラーが発生していますか?予想外の結果ですか? –

+0

私は下のクエリが動作しません。私は彼もこのサイトからの質問をします。私は構文を誤解しているかもしれません。 – ramonesfan

+0

ハーフアウトでは何を使用していますか?あなたはハイブを使用していますか?あなたはファイルのサンプルを投稿できますか? – shainnif

答えて

0

以下にクエリは、あなたが何を目指しているのと同じことを行う必要があります。私はあなたのケースを単純化しました。入れ子のcase文が構文エラーであるかどうかはわかりませんが、あまりにも複雑です。私はまた作成される列に名前を追加しました。

SELECT 
    CASE 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 18 AND 25 
     THEN '18-25' 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 26 AND 35 
     THEN '26-35' 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 36 AND 45 
     THEN '36-45' 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 46 AND 55 
     THEN '46-55' 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) BETWEEN 56 AND 65 
     THEN '56-65' 
    WHEN EXTRACT (YEAR FROM (select sysdate from dual)) - EXTRACT (YEAR FROM BRTH_DT) > 65 
     THEN '65andOver' 
    END AS Age_Range 
FROM MSTR_ACCT_A JOIN MSTR_CUST B 
WHERE B.CUST_ODT BETWEEN '2017-11-01' AND '2017-11-30' AND A.BR_CD LIKE '%00%'; 
+0

構文を提供してくれてありがとう。私はそれを試して、私は同じエラーが発生している - ステートメントをコンパイル中にエラーが発生しました:FAILED:ParseException行1:0 '(' 'select' 'sysdate'の近くの入力を認識できません – ramonesfan

+0

別のエラー - ステートメントをコンパイル中にエラー:FAILED:ParseException行3:23は 'YEAR' 'FROM' 'の入力を認識できません。(選択式 – ramonesfan

+0

の場合は、その括弧が存在してはいけません。先ほど気付かなかったのですが、編集された回答 –

関連する問題