Объедините два запроса, которые классифицируют данные на основе результатов - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь объединить два разных запроса, которые в основном выполняют одну и ту же функцию. Результаты каждого запроса классифицируются на основе результатов одного столбца. Когда я пытался объединить их, я получаю сообщение об ошибке арифметического переполнения.

Ниже приведена первая строка кода.

   select t1.Lives_Category,
   Count(t3.clean_ft_ee_cnt) "MVP Number of Clients",
   sum(t3.clean_ft_ee_cnt) as "MVP Sum of Lives"
   from [mvpGA].[mvp_client_data_t] t3
   join
   (
         select * from 
         (values ('1-9 Lives',1,9),
                 ('10-49 Lives',10,49),
                 ('50-199 Lives',50,199),
                 ('200-499 Lives',200,499),
                 ('500-1,9999 Lives',500,1999),
                 ('2,000+ Lives',2000,100000000),
                 ('Total Lives',0,100000000),
                 ('500+ Lives',500,1000000000),
                 ('Unknown Lives',0,0)
         )
         as Base_Table (Lives_Category,MinCnt,MaxCnt)
   ) t1 
   on t3.clean_ft_ee_cnt between t1.MinCnt and t1.MaxCnt
   where t3.mvp_rpt_id > 1399
   and t3.clean_do_not_use_ind is NULL
   and t3.clean_client_indv_flag = 'Group'
   group by t1.Lives_Category

результаты затем отображаются в виде:

Lives_Category   | MVP Number of Clients | MVP Sum of Lives
-----------------------------------------------------------
1-9 Lives        | 7565                  | 33845
10-49 Lives      | 7996                  | 191190
50-199 Lives     | 6820                  | 680157
200-499 Lives    | 2281                  | 683971
500-1,9999 Lives | 1510                  | 1424911
2,000+ Lives     | 672                   | 8282279
                 |                       |  
Total Lives      | 26929                 | 11296353
                 |                       |  
500+ Lives       | 2182                  | 9707190
                 |                       | 
Unknown Lives    | 85                    | 0

Вторая строка кода здесь и имеет ту же структуру, различие заключается в предложении where. Результаты двух столбцов «Количество клиентов» и «Сумма в реальном времени» должны быть их собственными столбцами. .

    select distinct a1.Lives_Category as "Lives Category",
    count(t2.clean_ft_ee_cnt) as "Number of Clients",
    sum(t2.clean_ft_ee_cnt) as "Sum of Lives"
    from [mvpGA].[mvp_client_data_t] t2
    join 
    (
    select * from 
    (values ('1-9 Lives',1,9),
                 ('10-49 Lives',10,49),
                 ('50-199 Lives',50,199),
                 ('200-499 Lives',200,499),
                 ('500-1,9999 Lives',500,1999),
                 ('2,000+ Lives',2000,100000000),
                 ('Total Lives',0,100000000),
                 ('500+ Lives',500,1000000000),
                 ('Unknown Lives',0,0)
         )
         as Base_Table (Lives_Category,MinCnt,MaxCnt)
     ) a1 
     on t2.clean_ft_ee_cnt between a1.MinCnt and a1.MaxCnt
     where t2.mvp_rpt_id = 1400
     and t2.clean_mvp_rpt_breakout = 'Fargo'
     and t2.clean_do_not_use_ind is NULL
     and t2.clean_client_indv_flag = 'Group'
     group by a1.Lives_Category

Я бы хотел, чтобы конечный результат был 5 столбцами. См. Структуру ниже.

Lives_Category |MVP Количество клиентов |MVP Сумма Жизней |Количество клиентов |Сумма жизней

Итак, резюмируем, результаты классифицированы так же, как показано в категории Lives_Category ..... но я хотел бы иметь 5 столбцов. Примечание: запросы технически рассчитываются для одной и той же таблицы, здесь просто разные предложения where.

1 Ответ

0 голосов
/ 25 октября 2019

Я недостаточно знаю о ваших данных, чтобы знать, следует ли вам использовать внутреннее, левое, правое или полное соединение. Поэтому вы должны изменить соединение в соответствии с вашей ситуацией, но это должно привести вас на правильный путь. По сути, я помещаю каждое ваше выбранное утверждение в подзапрос и присоединяюсь к общему полю «Живая категория».

SELECT    COALESCE(x.[Lives Category], y.[Lives Category]) AS [Lives Category]
        , x.[MVP Number of Clients]
        , x.[MVP Sum of Lives]
        , y.[Number of Clients]
        , y.[Sum of Lives]
FROM      (
              SELECT   t1.Lives_Category         AS [Lives Category]
                     , COUNT(t3.clean_ft_ee_cnt) AS [MVP Number of Clients]
                     , SUM(t3.clean_ft_ee_cnt)   AS [MVP Sum of Lives]
              FROM     mvpGA.mvp_client_data_t AS t3
              JOIN     (
                           SELECT *
                           FROM   (
                                      VALUES ('1-9 Lives', 1, 9)
                                           , ('10-49 Lives', 10, 49)
                                           , ('50-199 Lives', 50, 199)
                                           , ('200-499 Lives', 200, 499)
                                           , ('500-1,9999 Lives', 500, 1999)
                                           , ('2,000+ Lives', 2000, 100000000)
                                           , ('Total Lives', 0, 100000000)
                                           , ('500+ Lives', 500, 1000000000)
                                           , ('Unknown Lives', 0, 0)
                                  ) AS Base_Table (Lives_Category, MinCnt, MaxCnt)
                       )                       AS t1 ON t3.clean_ft_ee_cnt BETWEEN t1.MinCnt AND t1.MaxCnt
              WHERE    t3.mvp_rpt_id > 1399
                       AND t3.clean_do_not_use_ind IS NULL
                       AND t3.clean_client_indv_flag = 'Group'
              GROUP BY t1.Lives_Category
          ) AS x
FULL JOIN (
              SELECT   DISTINCT
                       a1.Lives_Category         AS [Lives Category]
                     , COUNT(t2.clean_ft_ee_cnt) AS [Number of Clients]
                     , SUM(t2.clean_ft_ee_cnt)   AS [Sum of Lives]
              FROM     mvpGA.mvp_client_data_t AS t2
              JOIN     (
                           SELECT *
                           FROM   (
                                      VALUES ('1-9 Lives', 1, 9)
                                           , ('10-49 Lives', 10, 49)
                                           , ('50-199 Lives', 50, 199)
                                           , ('200-499 Lives', 200, 499)
                                           , ('500-1,9999 Lives', 500, 1999)
                                           , ('2,000+ Lives', 2000, 100000000)
                                           , ('Total Lives', 0, 100000000)
                                           , ('500+ Lives', 500, 1000000000)
                                           , ('Unknown Lives', 0, 0)
                                  ) AS Base_Table (Lives_Category, MinCnt, MaxCnt)
                       )                       AS a1 ON t2.clean_ft_ee_cnt BETWEEN a1.MinCnt AND a1.MaxCnt
              WHERE    t2.mvp_rpt_id = 1400
                       AND t2.clean_mvp_rpt_breakout = 'Fargo'
                       AND t2.clean_do_not_use_ind IS NULL
                       AND t2.clean_client_indv_flag = 'Group'
              GROUP BY a1.Lives_Category
          ) AS y ON x.[Lives Category] = y.[Lives Category];
...