2012-10-17 192 views
19

对于某些人来说,它可能看起来很简单,但我只是无法得到它。
我来自同一个表的多个MS-SQL SELECT查询一遍又一遍:
从一个查询中的同一张表中选择多个COUNT选择

SELECT count(Page) as tAEC 
FROM someTable 
WHERE Page LIKE '%AEC%' 

下一个

SELECT count(Page) as tTOL 
FROM someTable 
WHERE Page LIKE '%TOL%' 

等等...

什么会更有效的方式来写这个查询。我搜索了一堆类似的问题,但我无法让他们中的任何一个人工作。所以,任何帮助,不胜感激。

回答

53
SELECT sum(case when Page LIKE '%AEC%' then 1 end) as tAEC, 
    sum(case when Page LIKE '%TOL%' then 1 end) as tTOL 
FROM someTable 
+0

不错,非常感谢你。我试过类似的总和(case)查询,但现在我看到我做错了,非常感谢你。 – crashtestxxx

+0

我在同一个表中有多个列,我想确保它只选择'Page'列。 – crashtestxxx

+0

不知道我是否理解。提供样本数据和所需的输出将有所帮助。 – RedFilter

4

您可以使用GROUP BY Page

SELECT 
    Page 
, COUNT(Page) as "nb" 
FROM someTable 
GROUP BY Page 

你也可以做一个GROUP BY CASE...

SELECT 
    CASE 
    WHEN Page LIKE '%AEC%' THEN "AEC" 
    WHEN Page LIKE '%TOL%' THEN "TOL" 
    ELSE "" 
    END AS "type" 
, count(Page) as "nb" 
FROM someTable 
GROUP BY type 

您还可以COUNT IF

SELECT 
    COUNT(IF(Page LIKE '%AEC%', 1, NULL) THEN "AEC" 
, COUNT(IF(Page LIKE '%TOL%', 1, NULL) THEN "TOL" 
FROM someTable 
+0

谢谢你的回复,我也会试一下。 – crashtestxxx

相关问题