Как получить результат в одной строке при использовании подзапросов в SQL Server 2008? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь получить таблицу с stage_name и ее количеством в соответствующем кредитном продукте.Как и в примере ниже, stage_name - это RCO, и есть три кредитных продукта, Авто кредит, Потребительский кредит и Кредитная карта.Хотя я использовал логику и получил правильные выходные данные, но в выходных данных я получаю отдельную строку для каждого сценария stage_name и кредитного продукта.Я хочу только одну строку со всеми тремя результатами.Пожалуйста, посмотрите на мой код ниже, фактический вывод и желаемый вывод:

SELECT 
    'RCO',
    CASE 
       WHEN sq2.loan_type = 'Consumer loan' 
          THEN SUM(ISNULL(sq2.user_count, 0)) 
    END AS Consumer_Loan,
    CASE 
       WHEN sq2.loan_type = 'Auto Loan' 
          THEN SUM(ISNULL(sq2.user_count, 0))  
    END AS Auto_Loan,
    CASE 
       WHEN sq2.loan_type = 'Credit Card' 
          THEN SUM(ISNULL(sq2.user_count, 0)) 
    END AS Credit_Card
FROM
    (SELECT 
         'RC0' AS ws_name, 'Consumer loan' AS loan_type,
         COUNT(DISTINCT a.bpm_referenceno) AS user_count, 
         a.takenby AS user_id
     FROM
         BM_RLOS_DecisionHistoryForm a
     INNER JOIN
         (SELECT 
              m.bpm_referenceno
          FROM 
              BM_RLOS_EXTTABLE m
          WHERE 
              m.loan_type = 'Consumer Loan') sq1 ON a.bpm_referenceno = sq1.bpm_referenceno
    WHERE 
        a.winame='RCO'
    GROUP BY 
        a.takenby

UNION
SELECT 'RC0','Auto loan',
count (DISTINCT a.bpm_referenceno), a.takenby
from
BM_RLOS_DecisionHistoryForm a
INNER JOIN
(SELECT 
m.bpm_referenceno
FROM BM_RLOS_EXTTABLE m
WHERE m.loan_type='Auto Loan')sq1
ON a.bpm_referenceno = sq1.bpm_referenceno
WHERE a.winame='RCO'
GROUP BY a.takenby

UNION
SELECT 'RC0','Credit Card',
count (DISTINCT a.bpm_referenceno), a.takenby
from
BM_RLOS_DecisionHistoryForm a
INNER JOIN
(SELECT 
m.bpm_referenceno
FROM BM_RLOS_EXTTABLE m
WHERE m.loan_type='Credit Card')sq1
ON a.bpm_referenceno = sq1.bpm_referenceno
WHERE a.winame='RCO'
GROUP BY a.takenby) sq2
GROUP BY sq2.ws_name,sq2.loan_type

Фактический вывод:

    |--------------|-------------|-------------|-------------|
    |   Stg_nm     |   Cons_ln   |   Auto_lan  | Credit_card |
    |--------------|-------------|-------------|-------------|
    |    RCO       |     NULL    |     NULL    |     8       |
    |--------------|-------------|-------------|-------------|
    |    RCO       |     NULL    |     55      |     NULL    |
    |--------------|-------------|-------------|-------------|
    |    RCO       |      81     |     NULL    |     NULL    |
    |--------------|-------------|-------------|-------------|

Требуемый вывод

|--------------|-------------|-------------|-------------|
|      Stg_nm  |     Cons_ln |   Auto_lan  | Credit_card |
|--------------|-------------|-------------|-------------|
|    RCO       |     81      |     55      |     8       |
|--------------|-------------|-------------|-------------|

1 Ответ

0 голосов
/ 29 мая 2018

Верхняя половина должна быть такой - отмените использование SUM и CASE и удалите последние GROUP BY в целом

SELECT 
    'RCO',
    SUM(CASE 
          WHEN sq2.loan_type = 'Consumer loan' 
          THEN sq2.user_count 
          ELSE 0 END
        ) 
    AS Consumer_Loan,
    SUM(CASE 
          WHEN sq2.loan_type = 'Auto loan' 
          THEN sq2.user_count 
          ELSE 0 END
        ) 
    AS Auto_Loan,
    SUM(CASE 
          WHEN sq2.loan_type = 'Credit Card' 
          THEN sq2.user_count 
          ELSE 0 END
        ) 
    AS Credit_Card
FROM
<your existing query, with the final GROUP BY removed>

Но вам нужно удалить GROUP BY изконец вообще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...