Сверните несколько строк в один - PullRequest
0 голосов
/ 18 июня 2020

У меня есть таблица, которая выглядит так:

USER_ID,ADDED_DATE,STATUS,COMPLETION_ID_TYPE,QA_OPTION,QA_OPTION_COUNT
12543,2020-06-01 00:00:00,qaComplete_L2,chart,Correct,3
12543,2020-06-01 00:00:00,qaComplete_L2,chart,Incorrect,3
12543,2020-06-12 00:00:00,qaComplete_L2,chart,Incorrect,1
12543,2020-06-12 00:00:00,qaComplete_L2,chart,Correct,1

Я хочу отображать результаты как:

USER_ID ADDED_DATE  STATUS  COMPLETION_ID_TYPE  L2 Correct  L2 InCorrect
8388    6/01/20 0:00    qaComplete_L2   chart   3   3
8388    6/12/20 0:00    qaComplete_L2   chart   1   1

Я пробовал это, но не получил ожидаемых результатов:

    select distinct user_id,
                         added_date,
                         status,
                         completion_id_type,
                         max(case
                                 when qa_option = 'Correct'
                                     then qa_option_count
                                 else 0
                             end) as L2_Correct,
                         max(case
                                 when qa_option = 'Incorrect' 
                                     then qa_option_count
                                 else 0
                             end) as L2_Incorrect

         from qa_report2
         where user_id = 12543
           and status = 'qaComplete_L2'
         group by user_id, status, added_date, completion_id_type,qa_option, qa_option_count
         order by user_id, added_date;

;
USER_ID,ADDED_DATE,STATUS,COMPLETION_ID_TYPE,L2_CORRECT,L2_INCORRECT
12543,2020-06-01 00:00:00,qaComplete_L2,chart,0,3
12543,2020-06-01 00:00:00,qaComplete_L2,chart,3,0
12543,2020-06-12 00:00:00,qaComplete_L2,chart,1,0
12543,2020-06-12 00:00:00,qaComplete_L2,chart,0,1

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы почти были там :)

Я удалил только отдельные и две последние группы по столбцам. Столбцы, которые вам нужны в расчетах, не должны появляться в предложении group by, а только в функции group в предложении select.

Итак, в конце, я думаю, вы ищете:

select  user_id,
        added_date,
        status,
        completion_id_type,
        max(case
              when qa_option = 'Correct'
                then qa_option_count
              else 0
            end) as L2_Correct,
        max(case
              when qa_option = 'Incorrect' 
                then qa_option_count
              else 0
            end) as L2_Incorrect
from  qa_report2
where user_id = 12543
and   status = 'qaComplete_L2'
group by user_id,
         status,
         added_date,
         completion_id_type
         --,qa_option
         --,qa_option_count
order by user_id,
         added_date;

Примечание: вы должны знать, что используете max (), я могу представить, что если существует несколько записей, вы действительно хотите использовать sum (), но это действительно зависит от вашего варианта использования.

0 голосов
/ 18 июня 2020

Для этого можно использовать PIVOT.

SELECT *
  FROM (
    SELECT USER_ID,
           ADDED_DATE,
           STATUS,
           COMPLETION_ID_TYPE,
           QA_OPTION_COUNT,
           QA_OPTION
      FROM QA_REPORT2
     WHERE USER_ID = 12543
       AND STATUS = 'qaComplete_L2'
) PIVOT (
    MAX ( QA_OPTION_COUNT )
    FOR QA_OPTION
    IN ( 'Correct' AS L2_CORRECT, 'Incorrect' AS L2_INCORRECT )
);
...