Как написать совокупный условный запрос SQL, чтобы получить количество отдельных столбцов и общее количество, передавая аргументы даты - PullRequest
0 голосов
/ 11 января 2020

Я сделал что-то вроде этого:

with q1 as 
( 
  select x, count(*) as A from T1 where .. condition group by x
 ),
q2 as ( select x, count(*) AS B  from T2 where .. condition group by x),
q3 as ( select x, count(*) AS C from T3 where .. condition group by x),
Q4 AS ( select x, count(*) AS D from T4 where .. condition group by x)

SELECT Q1.X, Q1.A, Q2.B, Q3.C, Q4.D FROM Q1,Q2,Q3,Q4 

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

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Conditional Aggregation может использоваться через JOIN предложения по x столбцам, которые встречаются в названии:

select t1.x, 
       count(case when t1.y=1 then 1 end ) as A,
       count(case when t2.z=0 then 1 end ) as B,
       count(case when t3.a=0 then 1 end ) as C,
       count(case when t4.b=0 then 1 end ) as D
  from t1
  join t2 on t2.x = t1.x
  join t3 on t3.x = t1.x
  join t4 on t4.x = t1.x
 group by t1.x

Условия в WHERE Условия принимаются как t1.y=1, t2.z, t3.a, t4.b соответственно.

0 голосов
/ 11 января 2020

Вы можете использовать union all, а затем conditional aggregation следующим образом:

Select x, 
       Coalesce(sum(case when tab ='Q1' then cnt end),0) As a,
       Coalesce(Sum(case when tab ='Q2' then cnt end),0) As b,
       Coalesce(Sum(case when tab ='Q3' then cnt end),0) As c,
       Coalesce(Sum(case when tab ='Q4' then cnt end),0) As d
From
     (Select 'Q1' as tab, x, count(*) cnt from t1 Where ... group by x
      Union all
      Select 'Q2' as tab, x, count(*) from t2 Where ... group by x
      Union all
      Select 'Q3' as tab, x, count(*) from t3 Where ... group by x
      Union all
      Select 'Q4' as tab, x, count(*) from t4  Where ... group by x)
Group by x;

Cheers !!

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