【问题标题】:I need to Count entries that are duplicated on two unrelated complex queries我需要计算在两个不相关的复杂查询中重复的条目
【发布时间】:2017-07-20 21:21:43
【问题描述】:

我编写了两个单独的查询并尝试合并,但这对我来说太复杂了。第一个查询是返回经销商编号列表的子查询,没有任何重复的编号。第二个查询返回经销商编号列表,其中包含多个重复的经销商编号,以及经销商余额。我需要查看第一个查询中的经销商编号出现在第二个查询中的次数。目前,我将两个查询结果复制并粘贴到 Excel 中,然后使用 Countif 函数查看第一个查询中的经销商出现在第二个查询中的次数。

有没有办法在 SQL 中完成整个过程?

查询 1

SELECT DISTINCT(X.PARENTS) AS "UNIQUE PARENTS" FROM ( SELECT

CASE WHEN  PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END AS "PARENTS",

CASE WHEN ((SUM(decode(CUSTMR_COLLAT_TYPE_DESCR,'New Car',1,0)) ) ) <> 0 THEN 'Y' ELSE 'N' END AS "FRANCHISE"

FROM MONTH_END_TABLE

WHERE TRUST_ID IS NOT NULL AND EXTRCT_FILE_DT = '30-JUN-2017'

GROUP BY CASE WHEN  PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END, CUSTMR_NBR
) X

WHERE X.FRANCHISE = 'N'

查询 2

SELECT CASE WHEN  PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END AS "DUPLICATE PARENTS",

SUM(CURR_PRINCPL_AMT)

FROM MONTH_END_TABLE

WHERE TRUST_ID IS NOT NULL

AND EXTRCT_FILE_DT = '30-JUN-2017'

AND (CASE WHEN  PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END <>CUSTMR_NBR)

GROUP BY CASE WHEN  PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END, CUSTMR_NBR

【问题讨论】:

    标签: sql count subquery case-when


    【解决方案1】:
    Select Count(PARENT_CUSTMR_NBR) From
    (
    SELECT DISTINCT(X.PARENTS) AS "UNIQUE PARENTS" FROM ( SELECT
    
    CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR 
    END AS "PARENTS",
    
    CASE WHEN ((SUM(decode(CUSTMR_COLLAT_TYPE_DESCR,'New Car',1,0)) ) ) <> 0 
    THEN 'Y' ELSE 'N' END AS "FRANCHISE"
    
    FROM MONTH_END_TABLE
    
    WHERE TRUST_ID IS NOT NULL AND EXTRCT_FILE_DT = '30-JUN-2017'
    
    GROUP BY CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END, CUSTMR_NBR ) X
    
    WHERE X.FRANCHISE = 'N')
    Where PARENT_CUSTMR_NBR
    IN
    (SELECT CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END AS "DUPLICATE PARENTS",
    
    SUM(CURR_PRINCPL_AMT)
    
    FROM MONTH_END_TABLE
    
    WHERE TRUST_ID IS NOT NULL
    
    AND EXTRCT_FILE_DT = '30-JUN-2017'
    
    AND (CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END <>CUSTMR_NBR)
    
    GROUP BY CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END, CUSTMR_NBR)
    

    【讨论】:

    • 我认为这非常接近,感谢您的帮助!不幸的是,代码“CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END”部分不能缩短为“PARENT_CUSTMR_NBR”。我希望子查询可以修复它,但没有运气。
    • 您可以为此使用别名,例如:CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR END AS "PARENT_CUSTMR_NBR"
    【解决方案2】:

    我得到了它的工作,感谢您的帮助 Suresh!这是最终的查询:

    Select Count(DUPPARENTS) From
    
    (SELECT CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END AS "DUPPARENTS"
    
    FROM MONTH_END_TABLE
    
    WHERE TRUST_ID IS NOT NULL
    
    AND EXTRCT_FILE_DT = '30-JUN-2017'
    
    AND (CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END <>CUSTMR_NBR)
    
    GROUP BY CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END, CUSTMR_NBR)
    
    Where (DUPPARENTS) IN
    
    (SELECT DISTINCT(X.UNIPARENTS) FROM ( SELECT
    
    CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE PARENT_CUSTMR_NBR 
    END AS "UNIPARENTS",
    
    CASE WHEN ((SUM(decode(CUSTMR_COLLAT_TYPE_DESCR,'New Car',1,0)) ) ) <> 0 
    THEN 'Y' ELSE 'N' END AS "FRANCHISE"
    
    FROM MONTH_END_TABLE
    
    WHERE TRUST_ID IS NOT NULL AND EXTRCT_FILE_DT = '30-JUN-2017'
    
    GROUP BY CASE WHEN PARENT_CUSTMR_NBR IS NULL THEN CUSTMR_NBR ELSE 
    PARENT_CUSTMR_NBR END, CUSTMR_NBR ) X
    
    WHERE X.FRANCHISE = 'N')
    

    【讨论】:

      猜你喜欢
      • 2019-09-23
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2013-10-28
      • 2018-09-11
      相关资源
      最近更新 更多