如果我有一个包含两列A和B的表,并且想要计算一个项目在两列中显示的次数,是否有办法在不使用游标或临时表的情况下这样做?
Ex:
Column A Column B
BMW Ford
Jaguar BMW
Mercedes Lexus
Chevrolet Jaguar
BMW Ford
我希望结果是:
BMW 3
Jaguar 2
Mercedes 1
Chevrolet 1
Ford 2
Lexus 1
答案 0 :(得分:2)
SELECT ColumnA, COUNT(*) as Times
FROM (
SELECT ColumnA FROM ATable
UNION ALL
SELECT ColumnB FROM ATable) Joined
GROUP BY ColumnA
大多数DBMS要求您为派生表
设置别名答案 1 :(得分:1)
SELECT x, COUNT(*)
FROM (SELECT ColumnA AS x FROM t
UNION ALL
SELECT ColumnB FROM t)
GROUP BY x
答案 2 :(得分:0)
你不是说DBMS。如果使用SQL Server,您可以使用UNPIVOT
来避免两次扫描表。
SELECT car, COUNT(*)
FROM YourTable
UNPIVOT (car FOR col in (ColumnA, ColumnB)) u
GROUP BY car
根据您拥有的索引,这可能比UNION ALL
方法效率更高或更低(如果ColumnA
和ColumnB
同时被编入索引,则UNION ALL
查询计划可以在2个索引上进行合并连接并将其提供给聚合运算符,从而无需对UNPIVOT
计划需要的数据进行排序)