【问题标题】:Two queries and the difference of their sums两个查询及其总和的差异
【发布时间】:2018-08-07 20:34:12
【问题描述】:

以下是我想合并为一个的两个简单/相似的查询。我还希望有一列包含任一查询中两个总和之间的差异。

(我找到了关于连接两个查询的帮助,但我认为有一个更简单的解决方案,而且我是 SQL 新手)

我希望我的输出为 4 列:

  1. Post_Date
  2. All_Payments
  3. CCP_Payments
  4. All_Payments - CCP_Payments(减去两个)

查询 1:

SELECT
TDL.POST_DATE
, SUM(CASE WHEN TDL.DETAIL_TYPE IN(2,5,11,20,22,32,33) THEN TDL.AMOUNT*-1 ELSE 0 END) PAYMENTS

FROM
STG_OJDT.STG_CL.CLARITY_TDL_TRAN TDL

WHERE
TDL.POST_DATE = '2018-08-01 00:00:00'
AND TDL.SERV_AREA_ID = 10

GROUP BY 
TDL.POST_DATE

查询2:

SELECT
TDL.POST_DATE
, SUM(CASE WHEN TDL.DETAIL_TYPE IN(2,5,11,20,22,32,33) THEN TDL.AMOUNT*-1 ELSE 0 END) CCP_PAYMENTS

FROM
STG_OJDT.STG_CL.CLARITY_TDL_TRAN TDL

WHERE
TDL.POST_DATE = '2018-08-01 00:00:00'
AND TDL.SERV_AREA_ID = 10
AND TDL.BILL_AREA_ID IN (810000020, 810000025, 810000030)
GROUP BY 
TDL.POST_DATE

【问题讨论】:

  • 请不要在标题和问题中使用全大写字母,这相当于 YELLING。

标签: sql join union difference


【解决方案1】:

您可以使用条件聚合计算单行中的两个值:

SELECT TDL.POST_DATE,
       SUM(CASE WHEN TDL.DETAIL_TYPE IN (2, 5, 11, 20, 22, 32, 33) THEN TDL.AMOUNT*-1 ELSE 0 END) as PAYMENTS,
       SUM(CASE WHEN TDL.DETAIL_TYPE IN (2, 5, 11, 20, 22, 32, 33) AND TDL.BILL_AREA_ID IN (810000020, 810000025, 810000030) THEN TDL.AMOUNT*-1 ELSE 0 END) as CCP_PAYMENTS
FROM STG_OJDT.STG_CL.CLARITY_TDL_TRAN TDL
WHERE TDL.POST_DATE = '2018-08-01 00:00:00' AND
      TDL.SERV_AREA_ID = 10    
GROUP BY  TDL.POST_DATE;

不过,如果你只是想要不同:

SELECT TDL.POST_DATE,
       SUM(CASE WHEN TDL.DETAIL_TYPE IN (2, 5, 11, 20, 22, 32, 33) THEN TDL.AMOUNT*-1 ELSE 0 END) as diff
FROM STG_OJDT.STG_CL.CLARITY_TDL_TRAN TDL
WHERE TDL.POST_DATE = '2018-08-01 00:00:00' AND
      TDL.SERV_AREA_ID = 10 AND 
      TDL.BILL_AREA_ID NOT IN (810000020, 810000025, 810000030) 
GROUP BY TDL.POST_DATE

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多