CASE语句总和-加入其他表时出现的问题

时间:2019-06-21 15:54:38

标签: sql sql-server join sum case

我在存储过程中有一个case语句,将一个account字段加起来,然后插入到一个用户ID中。逻辑起作用...直到连接到另一个表。

尝试向查询中添加不同的计数和其他表,但是当您加入另一个表时,当我希望该值对帐户为0时,它仍然应用1值。

这是存储过程中的计算;

INSERT INTO #SUMMARY_TEMP (USER_ID,FSN_CNT )
(SELECT USER_ID,
        SUM(CASE WHEN A_GROUP_CD = 'RED' AND A_TYPE_CD = 'FSN' THEN REC_COUNT ELSE 0 END)
) AS 'FSN_CNT',
FROM (SELECT A_ACCOUNT_NBR,
             A_USER_ID,
             A_GROUP_CD,
             A_TYPE_CD,
             COUNT(*) AS REC_COUNT
      FROM EXCEPTION_DETAIL
           INNER JOIN #STAFF ON A_REPORT_DT = @REPORT_DT 
                            AND (A_USER = B_USER_ID)
      GROUP BY A_ACCOUNT_NBR,
               A_USER_ID_ID,
               A_GROUP_CD,
               A_TYPE_CD) EXCEPTIONS
GROUP BY A_USER_ID,
A_ACCOUNT_NBR)

这是我对2个用户ID的预期结果

A_ACCOUNT_NBR   USER_ID     FSN_CNT 
123456      HENRY       0   
123498      HENRY       1   
374933      JOE     1   
474930      JOE     0   

但是当我连接到另一个表时,数据看起来像

A_ACCOUNT_NBR   USER_ID     FSN_CNT 
123456      HENRY       1   
123498      HENRY       1   
374933      JOE     1   
474930      JOE     1

将应为1的值应用于帐户123456和474930。 我认为是因为另一个表没有ACCOUNT_NBR列-我正在USER_ID上加入,因此它将1应用于表A的所有ACCOUNT_NBR。

感谢所有建议,我尝试使用cte,计数现在看起来不错,但是它创建了重复的行,如下所示。关于如何删除重复项的任何建议,以下是我用于cte的联接;

从cte中选择cte。*,jt.USER_ID加入cte.USER_ID = jt.USER_ID的EXCEPTION_DETAIL jt

USER ACCOUNT_NBR FSN_CNT 亨利123456 0 亨利123456 0 亨利123498 1 亨利123498 1

约374933 1 乔374933 1 乔474930 0 乔474930 0

1 个答案:

答案 0 :(得分:0)

您可以使用cte分隔第一个查询,并与下一个级别一起加入

sourceSets {
  main {
    //if you truly want to override the defaults:
    output.resourcesDir = file('out/bin')
    // Compiled Java classes should use this directory
    java.outputDir = file('out/bin')
  }
}