【问题标题】:aggregate data from 2 tables oracle SQL聚合来自 2 个表 oracle SQL 的数据
【发布时间】:2021-10-01 09:29:58
【问题描述】:

我在 3 个表中有这些数据:

表 1:BU

BU_CODE ARCHIVE_FLG
1001 Y
1002 Y
1003 Y
1004 N
1005 Y

表 2:STG_ACCOUNT

BU_CODE ACCOUNT_ID
1001 A0001
1001 A0003
1002 A0002

表 3:STG_CONTRACT

BU_CODE CONTRACT_ID
1002 C0001
1002 C0002

这两个查询工作正常:

查询 1:

SELECT
T2.BU_CODE, COUNT(T1.ACCOUNT_ID) AS COUNT_OF_ACCOUNT
FROM STG_ACCOUNT T1
FULL JOIN S_BU T2 ON T2.BU_CODE = T1.BU_CODE
WHERE T2.ARCHIVE_FLG = '1'
GROUP BY T2.BU_CODE
ORDER BY T2.BU_CODE;
BU_CODE COUNT_OF_ACCOUNT
1001 2
1002 1
1003 0
1005 0

查询 2:

SELECT
T2.BU_CODE, COUNT(T1.CONTRACT_ID) AS COUNT_OF_CONTRACT
FROM STG_CONTRACT T1
FULL JOIN S_BU T2 ON T2.BU_CODE = T1.BU_CODE
WHERE T2.ARCHIVE_FLG = '1'
GROUP BY T2.BU_CODE
ORDER BY T2.BU_CODE;
BU_CODE COUNT_OF_CONTRACT
1001 0
1002 2
1003 0
1005 0

现在我想合并这两个查询的结果以显示更优雅的输出:

BU_CODE COUNT_OF_ACCOUNT COUNT_OF_CONTRACT
1001 2 0
1002 1 2
1003 0 0
1005 0 0

什么 Oracle SQL 函数可以帮助我?

【问题讨论】:

标签: oracle


【解决方案1】:

一个选项可能是使用CTE 表达式

with x as 
( 
SELECT
T2.BU_CODE, COUNT(T1.ACCOUNT_ID) AS COUNT_OF_ACCOUNT
FROM STG_ACCOUNT T1
FULL JOIN S_BU T2 ON T2.BU_CODE = T1.BU_CODE
WHERE T2.ARCHIVE_FLG = '1'
GROUP BY T2.BU_CODE
ORDER BY T2.BU_CODE
), 
y as 
( 
SELECT
T2.BU_CODE, COUNT(T1.CONTRACT_ID) AS COUNT_OF_CONTRACT
FROM STG_CONTRACT T1
FULL JOIN S_BU T2 ON T2.BU_CODE = T1.BU_CODE
WHERE T2.ARCHIVE_FLG = '1'
GROUP BY T2.BU_CODE
ORDER BY T2.BU_CODE
) 
select x.bu_code , x.count_of_account, y.count_of_contract 
from x join y on x.bu_code=y.bu_code

【讨论】:

    【解决方案2】:

    您可以加入两个表。

    SELECT
    T1.BU_CODE AS BU_CODE, COUNT(DISTINCT T2.ACCOUNT_ID) AS COUNT_OF_ACCOUNT, COUNT(DISTINCT T3.CONTRACT_ID) AS COUNT_OF_CONTRACT
    FROM S_BU T1
    LEFT JOIN STG_ACCOUNT T2 ON T1.BU_CODE = T2.BU_CODE
    LEFT JOIN STG_CONTRACT T3 ON T1.BU_CODE = T3.BU_CODE
    WHERE T1.ARCHIVE_FLG = '1'
    GROUP BY T1.BU_CODE
    ORDER BY T1.BU_CODE;
    

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      相关资源
      最近更新 更多