【问题标题】:MSSQL: Display Rows for a Select with Case and Count even if Count = 0MSSQL:即使 Count = 0,也显示带有 Case 和 Count 的选择的行
【发布时间】:2014-04-23 13:28:52
【问题描述】:

我希望我能详细解释我的问题,以便你们能够理解我。 我创建了一个小例子。

我有一个如下所示的表格:

City       |    Name

Berlin     |    Mike
Berlin City|    Peter
Stuttgart  |    Boris

这是我的查询:

    SELECT CASE
            WHEN City like '%Berlin%' THEN 'Count Person in Berlin:'
            WHEN City like '%Stuttgart%' THEN 'Count Person in Stuttgart:'
            WHEN City like '%Dresden%' THEN  'Count Person in Dresden:'
            ELSE 'unknown'
            END AS Text,
            COUNT(Name) AS countPersons
     FROM tblTest
     GROUP BY City

这是结果:

Count Person in Berlin:     2
Count Person in Stuttgart:  1

但我想要的结果是:

Count Person in Berlin:     2
Count Person in Stuttgart:  1
Count Person in Dresden:    0

我怎样才能得到我想要的结果?希望你能帮助我。

提前致谢。

SQL Fiddle Demo

【问题讨论】:

    标签: sql sql-server count case


    【解决方案1】:

    如果您没有包含城市列表的表,则可以使用子查询。解决这类问题的关键是left outer join

    select cities.city, count(t.city) as numpeople
    from (select 'Berlin' as city union all
          select 'Stuttgart' union all
          select 'Dresden'
         ) cities left outer join
         tbltest t
         on t.city = cities.city
    group by cities.city;
    

    如果你也想拥有'unknown',那么可以使用full outer join

    select coalesce(cities.city, 'unknown') as city, count(t.city) as numpeople
    from (select 'Berlin' as city union all
          select 'Stuttgart' union all
          select 'Dresden'
         ) cities full outer join
         tbltest t
         on t.city = cities.city
    group by coalesce(cities.city, 'unknown');
    

    【讨论】:

    • +1 但是,我缺少 CASECount Person in ... 部分。
    • 谢谢,这对我有点帮助,但就像蒂姆说的案例部分不清楚,我的主要问题是,例如在城市列中,一个人是“柏林”,另一个人是“柏林市”,所以我必须选择“%Berlin%”。对不起,我的例子不够好,我会编辑它
    • 你可以使用IN 运算符吗,@Gordon?
    • @Newbie 。 . .对我来说,in 的使用位置并不明显。
    猜你喜欢
    • 2015-03-09
    • 2013-03-20
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多