2012-02-09 129 views
1

从概念上讲,我有一个包含水果项目列表的表。我想通过一个查询来查看有多少苹果,橙子,“苹果或橙子”和“其他水果”。'A','B'和'A或B'的T-SQL COUNT

如何在T-SQL中实现这一点?

+0

作为一个例子,你的标题和描述都暗示你可能有一行只有一个值,比如“苹果或橙子”......基于@gbn的回答,我们现在可以假设你的意思不是你说了什么,每一行都会有一个奇异的值,比如'apple'或者'orange'或者'kiwi' ... – 2012-02-09 15:23:59

+0

@AaronBertrand数据中的概念会有太多的解释。我明白你的观点,但水果是普遍的,并得到有效回答。 – Craig 2012-02-09 15:30:48

+0

@AaronBertrand如果你看看我以前的问题,几乎所有没有标记答案的人都没有正确回答。 – Craig 2012-02-09 15:34:14

回答

9
SELECT 
    COUNT(*) AS Allfruits, 
    COUNT(CASE WHEN fruit = 'Apple' THEN 1 END) AS AppleCount, 
    COUNT(CASE WHEN fruit = 'Orange' THEN 1 END) AS OrangeCount, 
    COUNT(CASE WHEN fruit IN ('Apple','Orange') THEN 1 END) AS AppleOrOrangeCount, 
    COUNT(*) - COUNT(CASE WHEN fruit IN ('Apple','Orange') THEN 1 END) AS OtherFruitCount 
FROM 
    MyTable 

注:如果没有ELSE子句或某些显式条件,CASE会给出NULL。 COUNT忽略NULL。

+0

完美答案! Upvoted! – Marco 2012-02-09 15:16:52

+0

美丽。谢谢!我错过的概念是将一个CASE放在COUNT里面。不要以为我这样做过。 – Craig 2012-02-09 15:18:37

+0

+1给出了一个模糊的问题(至少对我来说)。 – 2012-02-09 15:21:35

相关问题