SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组
Posted
技术标签:
【中文标题】SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组【英文标题】:SQL Query (SQL Server 2008) to retrieve data from two tables and group results 【发布时间】:2011-05-29 22:22:22 【问题描述】:我有两个表(假设 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
...但是在结果中应该有更少的记录(因为内部连接)。
当我使用完全联接时,应该有更多记录..
【问题讨论】:
【参考方案1】:按照 Siva 的建议进行修改。
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
【讨论】:
如果对您有帮助,请标记为已回答。 @Siva - 感谢您的建议,我已经进行了修改。 @Siva - 已更正。这里已经是深夜了。我没有直接思考。谢谢。【参考方案2】:你可以试试这个……
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)
【讨论】:
嗨,很可爱,它几乎可以工作(我有转换错误,但可以修复)。非常感谢你。 :)【参考方案3】: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
【讨论】:
【参考方案4】:Select Category,(Select count(id) from t1 where t1.Category=t3.Category),(Select count(id) from t2 where t2.Category=t3.Category) 从 t3 开始
t3 包含
类别1 类别2 第三类
【讨论】:
以上是关于SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组的主要内容,如果未能解决你的问题,请参考以下文章
Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效
SQL Server-2012 database query foundation
Understanding how SQL Server executes a query
Sql Query 列出 SQL Server 2005 数据库中的所有视图