2016-08-12 17 views
-1

私は2つのタブを持っています。最初は、あるタイプのディスカウントを開始したときのデータ(8種類のディスカウントがありますが、2つのカテゴリに分けています)です。割引は6ヶ月有効ですが、毎月減少し、割引の開始日はすべての人に異なります。 2番目の表にはトランザクションがあります。グループ別、別の日付

最初の1ヶ月目のディスカウントと2番目のカテゴリの人が最初の1ヶ月目、2回目にどのくらいの取引をしたかを知りたい。あなたの必要性を理解しようと

SELECT (CASE WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATA_DISCOUNT))=0 THEN 0 
    WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT))=1 THEN 1 
    WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT))=2 THEN 2 
    WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT))=3 THEN 3 
    WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT))=4 THEN 4 
    WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT))=5 THEN 5 
    END) 
    AS MONTH, 
    CASE WHEN A.TYPE IN (5,6,7,8) THEN COUNT(A.PRICE) 
    END AS COUNT_TRANS_1, 
    CASE WHEN A.TYPE IN (5,6,7,8) THEN SUM(A.PRICE) 
    END AS SUM_PRICE_1, 
    CASE WHEN A.TYPE IN (1,2,3,4) THEN COUNT(A.PRICE) 
    END AS COUNT_TRANS_2, 
    CASE WHEN A.TYPE IN (1,2,3,4) THEN SUM(A.PRICE) 
    END AS SUM_PRICE_2 
from DATABASE_1 A join DATABASE_2 B 
on A.ID=B.ID 
where Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT)) IN (0,1,2,3,4,5) 
GROUP BY A.ID, MONTH 
+0

サンプルデータと希望の結果を投稿して、必要が明確になるようにしてください。他の人の中で、なぜ「いつまで(A.DATE_TRANS、B.DATE_DISCOUNT)= 1 THEN 1? 'Trunc(Months_Between(A.DATE_TRANS、B.DATE_DISCOUNT))'と同じではありませんか? – Aleksej

答えて

0

、多分あなたは、次のものが必要です。

SELECT Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT)) AS MONTH, 
    COUNT(
     CASE 
      WHEN A.TYPE IN (5,6,7,8) 
       THEN A.PRICE 
      ELSE NULL 
     END 
     ) AS COUNT_TRANS_1, 
    SUM(
     CASE 
      WHEN A.TYPE IN (5,6,7,8) 
       THEN A.PRICE 
      ELSE 0 
     END 
    ) AS SUM_PRICE_1, 
    COUNT(
     CASE 
      WHEN A.TYPE IN (1,2,3,4) 
       THEN A.PRICE 
      ELSE NULL 
     END 
     ) AS COUNT_TRANS_2, 
    SUM(
     CASE 
      WHEN A.TYPE IN (1,2,3,4) 
       THEN A.PRICE 
      ELSE 0 
     END 
    ) AS SUM_PRICE_2 
from DATABASE_1 A join DATABASE_2 B 
on A.ID=B.ID 
where Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT)) IN (0,1,2,3,4,5) 
GROUP BY A.ID, Trunc(Months_Between(A.DATE_TRANS, B.DATE_DISCOUNT)) 

私はあなたがそれをチェックし、IDによってグループに必要かわかりません。

+0

すべて動作します!どうもありがとうございました ! –

関連する問題