CASE Statement sum - выдача при объединении с другими таблицами - PullRequest
0 голосов
/ 21 июня 2019

У меня есть инструкция case в хранимой процедуре, которая суммирует поле учетной записи, а затем вставляется в идентификатор пользователя.Логика работает ... до объединения с другой таблицей.

пытался добавить различные запросы и дополнительные таблицы к запросу, но все же, когда вы присоединяетесь к другой таблице, он применяет значение 1, когда я хочу, чтобы оно было 0на счет.

Это вычисление в сохраненном процессе;

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 идентификаторов пользователя

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

, когда к счету 123456 и 474930 применяется значение 1, и оно должно быть 0. Я думаю, что это потому, что в другой таблице нет столбца ACCOUNT_NBR -я присоединяюсь к USER_ID, и поэтому он применяет 1 ко всем ACCOUNT_NBR из таблицы A.

Спасибо за все предложения, я попытался использовать cte, и счетчик теперь выглядит хорошо, но его созданные повторяющиеся строки, как показано ниже,Любые предложения о том, как удалить дублирование, ниже - это соединение, которое я использую для cte;

выберите cte. *, Jt.USER_ID из cte join EXCEPTION_DETAIL jt на cte.USER_ID = jt.USER_ID

USER ACCOUNT_NBR FSN_CNT ГЕНРИ 123456 0 ГЕНРИ 123456 0 ГЕНРИ 123498 1 ГЕНРИ 123498 1

ДЖО 374933 1 ДЖО 374933 1 ДЖО 474930 0 ДЖО 474930 0

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете отделить первый запрос с помощью cte и присоединиться к нему на следующем уровне, как показано ниже

with cte as
(
(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)
) select cte.*,jt.USER_ID from cte join jointable_name jt on cte.USER_ID=jt.USER_ID
...