我正在努力学习更多关于UNION
函数在SQL Server中的工作原理。
我有一个针对单个表的查询:
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
我确信有一个明显的原因,为什么这不起作用,但任何人都可以指出这是什么以及我如何能够完成我想要做的事情?
答案 0 :(得分:2)
您无法为两个不同的Group by
编写通用select's
子句。您需要为每个Group by
select
子句
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
答案 1 :(得分:1)
COUNT,因为任何关联的聚合函数都必须指定GROUP BY。您必须分别对每个子查询使用group by:
ionic start sample --v2
cd sample
ionic lab
ionic upload
最好使用UNION ALL vs UNION - UNION消除结果集中的重复项,因为 - 假设 - 你想要合并两个结果,因为它们使用UNION ALL更安全