在查询的选择部分中使用条件计算结果

时间:2013-10-30 16:24:25

标签: sql sql-server

我需要从字母表中的所有字符开始的单词数量,存在于我的数据库中

我尝试了以下查询:

SELECT 
    COUNT(id) FROM(SELECT id FROM words WHERE word LIKE 'A%') as A,
    COUNT(id) FROM(SELECT id FROM words WHERE word LIKE 'B%') AS B,
    ...
    COUNT(id) FROM(SELECT id FROM words WHERE word LIKE 'Z%') AS Z

当我运行查询时,它给了我这个错误:

Incorrect syntax near 'COUNT'.    
Incorrect syntax near the keyword 'AS'.

有趣的是,如果我只询问以'A'开头的单词

,则查询工作正常

我做错了什么?

修改

仅为未来读者澄清。我希望每个字母字母检查一次的原因是因为字母表可能根据用户的语言而有所不同,并且每次生成查询时都会提供

4 个答案:

答案 0 :(得分:1)

如下所示使用案例

SELECT COUNT(CASE WHEN word LIKE 'A%' THEN 1 END) AS A
      ,COUNT(CASE WHEN word LIKE 'B%' THEN 1 END) AS B
.........
      ,COUNT(CASE WHEN word LIKE 'Z%' THEN 1 END) AS Z
FROM WORDS

答案 1 :(得分:1)

我建议将第一个字符串起来:

select
substring(word,1,1) as firstChar,
count(id)
from...
group by
substring(word,1,1) 

这似乎比26次个人检查更容易。

答案 2 :(得分:1)

如果你不介意将结果放在行而不是列中,那么这应该有效:

SELECT LEFT(word, 1) aChar, count(id) total
FROM words
WHERE word LIKE '[A-Z]%'
GROUP BY LEFT(word, 1)

小提琴here

另外,根据你的评论:

  

我必须进行所有这些检查,因为根据用户的语言,字母表会有所不同

在这里使用正则表达式更有意义,因为您可以参数化正则表达式的值并添加或删除字符而不更改查询代码(仅参数)。

答案 3 :(得分:0)

您不需要将COUNT操作与子查询分开,您可以内联。

SELECT
    (SELECT COUNT(*) FROM words WHERE word LIKE 'A%') AS A,
    (SELECT COUNT(*) FROM words WHERE word LIKE '%B') AS B,
    (SELECT COUNT(*) FROM words WHERE word LIKE '%C') AS C