SQL-запрос (SQL Server 2008) для извлечения данных из двух таблиц и группирования результатов - PullRequest
0 голосов
/ 30 мая 2011

У меня есть две таблицы (предположим, 2 столбца: ID и category). Я хотел бы извлечь записи из первой таблицы, из второй таблицы, сгруппировать результаты по категориям (в двух таблицах одинаковые категории) и подсчитать их отдельно. Например:

Первый стол:

ID | category
-------------
1 | category1
2 | category2
3 | category3
4 | category1
5 | category2

Второй стол:

ID | category
--------------
a | category1
b | category2
c | category3
d | category3

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

category | count(id from 1 table) | count(id from 2 table)
------------------------------------------------------------
category1 |        2 |        1
category2 |        2 |        2
category3 |        1 |        3

Я пытаюсь это:

SELECT r.AFFECTED_ITEM as usluga,
       COUNT(r.ID) AS problemy,
       (SELECT COUNT(k.ID)
          FROM KNOWNERRORM1 k
         WHERE k.AFFECTED_ITEM = r.AFFECTED_ITEM
      GROUP BY k.AFFECTED_ITEM) AS znane_bledy<br>
FROM ROOTCAUSEM1 r
group by r.AFFECTED_ITEM

... но в результате меньше записей, чем должно быть (из-за внутреннего соединения).

Когда я использовал полное объединение, появляется больше записей, что это должно быть ..

Ответы [ 4 ]

3 голосов
/ 30 мая 2011

Внесены изменения согласно предложениям Шивы.

SELECT COALESCE(table1Grouped.Category, table2Grouped.Category) AS Category, COALESCE(table1Grouped.IDCount, 0) AS Table1IDCount, COALESCE(table2Grouped.IDCount, 0) AS Table2IDCount
FROM
(
    SELECT table1.category, COUNT(table1.ID) AS IDCount
    FROM table1
    GROUP BY table1.category
) AS table1Grouped
    FULL OUTER JOIN
(
    SELECT table2.category, COUNT(table2.ID) AS IDCount
    FROM table2
    GROUP BY table2.category
) AS table2Grouped
    ON
table1Grouped.category = table2Grouped.Category
0 голосов
/ 07 февраля 2013

Выберите категорию, (выберите количество (id) из t1, где t1.Category = t3.Category), (Выберите количество (идентификатор) из t2, где t2.Category = t3.Category) ОТ t3

t3содержит

категория1 категория2 категория3

0 голосов
/ 30 мая 2011
SELECT
  category,
  table1count = COUNT(CASE tableid WHEN 1 THEN 1 END),
  table2count = COUNT(CASE tableid WHEN 2 THEN 1 END)
FROM (
  SELECT 1, category
  FROM Table1
  UNION ALL
  SELECT 2, category
  FROM Table2
) x (tableid, category)
GROUP BY category
0 голосов
/ 30 мая 2011

Вы можете попробовать это ...

SELECT Category, COUNT(Id) AS TableOneCount, 0 AS TableTwoCount
FROM Table1
UNION
SELECT Category, 0 AS TableOneCount, COUNT(Id) AS TableTwoCount
FROM Table2
GROUP BY Category

Извините, если это не сработает, я дома и у меня не установлен SQL Server или что-либо еще, чтобы проверить его (яодин из тех программистов, которые не пишут дома :-p)

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