Советы по созданию итогового подсчета значения в других таблицах - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть несколько таблиц со столбцом состояния в каждой. Я хочу отобразить сводку по количеству каждого статуса в таблице. Примерно так:

=============================================

Status   |  Table A  |  Table B  |  Table C  |

Status A |   3     |     8     |    2      |

Status B |     5     |     7     |    4      |

==============================================

Мне нужна помощь, чтобы начать, так как я не знаю, как подойти к этому вопросу. Я могу сделать простые функции COUNT, такие как:

SELECT status, count(status) from TABLE_A group by status

Но я не уверен, как заполнять данные в нужной форме или как, если возможно, использовать имена таблиц в качестве заголовков столбцов. Я был бы признателен за правильное направление. Спасибо!

Ответы [ 3 ]

0 голосов
/ 25 апреля 2019

Может быть попытаться сделать левые соединения после того, как вы рассчитали количество для каждой таблицы в отдельности. Что-то вроде:

select distinct t1.status, 
  count(t1.status) as [tableA], 
   t2.TableB, 
   t3.TableC from Table A t1
left join (
         select distinct status, 
         count(status) as [TableB] from Table B 
         group by status
) t2 on t1.status=t2.status
left join (
         select distinct status, 
         count(status) as [TableC] from Table C 
         group by status
) t3 on t1.status=t3.status
group by t1.Status 
0 голосов
/ 25 апреля 2019

Я бы использовал union all и агрегацию:

select status, sum(a) as a, sum(b) as b, sum(c) as c
from ((select status, count(*) as a, 0 as b, 0 as c
       from tablea
       group by status
      ) union all
      (select status, 0, count(*), 0 
       from tableb
       group by status
      ) union all
      (select status, 0, 0, count(*)
       from tablea
       group by status
      )
     ) abc
group by status;

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

0 голосов
/ 24 апреля 2019

может использовать левое соединение

 select t.status, a.cnt A, b.cnt B,c.cnt C
from( 
  select  status 
  from  tableA 
  union 
  select  status 
  from  tableB
  select  status 
  from  tableC

  ) t 
  left join (
      select status, count(*) cnt
      from  tableA
      group by status 
  ) a ON  on t.status  = a.status 

  left join (
      select status, count(*) cnt
      from  tableB
      group by status 
  ) b ON  on t.status  = b.status 
  left join (
      select status, count(*) cnt
      from  tableC
      group by status 
  ) c ON  on t.status  = c.status 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...