用于从两个表和组结果检索数据的SQL查询(SQL Server 2008)

用于从两个表和组结果检索数据的SQL查询(SQL Server 2008),sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两个表,假设有两列:ID和category。我想从第一个表中检索记录,从第二个表中,按类别对结果进行分组。两个表中有相同的类别,并分别对它们进行计数。例如: 第一张表: 第二张表: 我希望得到如下结果: category | count(id from 1 table) | count(id from 2 table) ------------------------------------------------------------ category1 | 2 |

我有两个表,假设有两列:ID和category。我想从第一个表中检索记录,从第二个表中,按类别对结果进行分组。两个表中有相同的类别,并分别对它们进行计数。例如:

第一张表: 第二张表: 我希望得到如下结果:

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
…但在结果中,由于内部联接,记录应该更少

当我使用“完全联接”时,应该有更多的记录。

您可以试试这个

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

你可以试试这个

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

根据Siva的建议进行了修改

按照湿婆的建议进行修改


选择类别,从t1中选择countid,其中t1.Category=t3.Category,从t2中选择countid,其中t2.Category=t3.Category 从t3

t3包含

类别1 类别2
类别3

选择类别,从t1中选择countid,其中t1.Category=t3.Category,从t2中选择countid,其中t2.Category=t3.Category 从t3

t3包含

类别1 类别2
category3

Hi,很可爱,几乎可以正常工作。我有转换错误,但可以修复。非常感谢您好,这是非常可爱的,它几乎工程我有转换错误,但它可以被修复。非常感谢如果有帮助,请标记为回答。@Siva-谢谢你的建议,我已经做了修改。@Siva-更正。这里已经很晚了。我没想清楚。谢谢。如果回答对你有帮助,请标记为。@Siva-谢谢你的建议,我已经做了修改。@Siva-更正。这里已经很晚了。我没想清楚。谢谢
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
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
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