[英]Union of multiple queries using the count function
我正在研究有关SQL Server中UNION
函数如何工作的更多信息。
我有一个针对单个表的查询:
SELECT Category, COUNT(*) AS Number
FROM Table1
GROUP BY Category;
这将返回“ Category
列中每个不同行的条目数。
我有多个按此Category
列组织的表,我希望能够获得一个查询返回的每个表的结果。
看起来UNION
可以完成我想要的工作,但是我尝试实现查询的方式不适用于COUNT(*)
。
SELECT *
FROM (SELECT Table1.Category
Table1.COUNT(*) AS Number
FROM dbo.Table1
UNION
SELECT Table2.Category
Table2.COUNT(*) AS Number
FROM dbo.Table2) AS a
GROUP BY a.Category
我敢肯定有一个显而易见的原因为什么它不起作用,但是任何人都可以指出那是什么以及我如何完成我想做的事情吗?
您不能为两个不同的select's
编写通用的Group by
子句。 您需要为每个select
使用Group by
子句
SELECT TABLE1.Category, --missing comma here
COUNT(*) as Number -- Remove TABLE1. alias name
FROM dbo.TABLE1
GROUP BY Category
UNION ALL --UNION
SELECT TABLE2.Category, --missing comma here
COUNT(*) as Number -- Remove TABLE1. alias name
FROM dbo.TABLE2
GROUP BY Category
如果您确实要删除结果中的重复项,则将UNION ALL
更改为UNION
COUNT作为任何关联的聚合函数都必须指定GROUP BY。 您必须对每个子查询分别使用group by:
SELECT * FROM (
SELECT TABLE1.Category,
COUNT(*) as Number
FROM dbo.TABLE1
GROUP BY TABLE1.Category
UNION ALL
SELECT TABLE2.Category,
COUNT(*) as Number
FROM dbo.TABLE2
GROUP BY TABLE2.Category
) as a
与UNION相比,使用UNION ALL更好-UNION消除了结果集中的重复项,因为-可以说-您希望合并两个结果,因为使用UNION ALL更安全
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.