Sql 分组依据,不同日期

Sql 分组依据,不同日期,sql,oracle,Sql,Oracle,我有两个标签。在第一个例子中,是关于谁以及何时开始某种类型的折扣的数据(有8种类型的折扣,但我们将它们分为两类)。折扣在6个月内有效,但每个月都会减少,并且每个人的折扣开始日期不同。 第二个表中是事务 我想知道在第一个月、第二个月等期间,第一类折扣和第二类折扣的交易量和交易量有多高 SELECT (CASE WHEN Trunc(Months_Between(A.DATE_TRANS, B.DATA_DISCOUNT))=0 THEN 0 WHEN Trunc(Months_Between

我有两个标签。在第一个例子中,是关于谁以及何时开始某种类型的折扣的数据(有8种类型的折扣,但我们将它们分为两类)。折扣在6个月内有效,但每个月都会减少,并且每个人的折扣开始日期不同。 第二个表中是事务

我想知道在第一个月、第二个月等期间,第一类折扣和第二类折扣的交易量和交易量有多高

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

为了理解您的需求,您可能需要以下几点:

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分组,请检查。

请发布一些示例数据和所需结果,以便您的需要更清楚;在其他情况下,为什么Trunc(A.DATE\u TRANS,B.DATE\u折扣之间的月数)等于1然后等于1?它和Trunc(A.DATE\u TRANS,B.DATE\u折扣)之间的月数不一样吗?