2011-02-18 23 views
0

如果我有一个包含两列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 

回答

1
SELECT x, COUNT(*) 
    FROM (SELECT ColumnA AS x FROM t 
     UNION ALL 
     SELECT ColumnB FROM t) 
    GROUP BY x 
2
SELECT ColumnA, COUNT(*) as Times 
FROM (
    SELECT ColumnA FROM ATable 
    UNION ALL 
    SELECT ColumnB FROM ATable) Joined 
GROUP BY ColumnA 

大多数DBMS要求您别名派生表

0

你不说DBMS。如果SQL Server可以使用UNPIVOT来避免两次扫描表。

SELECT car, COUNT(*) 
FROM YourTable 
UNPIVOT (car FOR col in (ColumnA, ColumnB)) u 
GROUP BY car 

取决于你有这个什么指标可能是因为存在比UNION ALL办法(或多或少有效的,如果这两个ColumnAColumnB被索引的UNION ALL查询计划可以做一个合并连接在2个索引和哺养成聚合运算符避免了需要对UNPIVOT计划需要的数据进行分类)

相关问题