用于从两个表和组结果检索数据的SQL查询(SQL Server 2008)
我有两个表,假设有两列:ID和category。我想从第一个表中检索记录,从第二个表中,按类别对结果进行分组。两个表中有相同的类别,并分别对它们进行计数。例如: 第一张表: 第二张表: 我希望得到如下结果:用于从两个表和组结果检索数据的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 |
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
category3Hi,很可爱,几乎可以正常工作。我有转换错误,但可以修复。非常感谢您好,这是非常可爱的,它几乎工程我有转换错误,但它可以被修复。非常感谢如果有帮助,请标记为回答。@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