【问题标题】:Returning count after name if more than one record如果有多个记录,则在名称后返回计数
【发布时间】:2023-03-29 10:34:01
【问题描述】:

我在搜索中很难找到答案。这是一个示例表:

1 | Bob Smith | 
2 | Mary Jones |
3 | Paul Bunyon |
4 | Bob Smith |
5 | Bob Smith |
6 | Mary Jones |
7 | Tim Gunn |

我想选择不同数量的名称但是,我需要该名称在返回结果后显示的记录中出现的次数。所以返回的结果应该是这样的:

Bob Smith (3)
Mary Jone (2)
Paul Bunyon
Tim Gunn

我正在使用 SQL SERVER 2012

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    Group By + Count(*) ,您需要将int 转换为varchar

    SELECT NameCount = Name + CASE WHEN COUNT(*) = 1 THEN ''
                              ELSE ' (' + CAST(Count(*) as varchar(10)) + ')' END
    FROM dbo.Table1
    GROUP BY Name
    

    Demo

    【讨论】:

    • +1 是第一,虽然我真的不认为我看到了你对这个问题的回答。
    【解决方案2】:

    您希望数字在大于 1 时有条件地放在括号中:

    select (case when count(*) = 1 then Name
                 else concat(Name, ' (', Count(*), ')')
            end)
    from t
    group by Name;
    

    SQL Server 2012 支持 ANSI 标准 concat() 函数。而且,它采用数字参数,因此我们不必将数字显式转换为字符串以将它们连接到字符串。

    【讨论】:

      【解决方案3】:

      只需使用“分组依据”。

      从表中选择名称,计数(*) 按名称分组

      【讨论】:

        【解决方案4】:

        虽然这里的许多答案都告诉您如何在 SQL 中完成所有操作,但我认为您应该简单地从查询中返回原始数据:

        SELECT
            Name,
            Count(*) AS NameCount
        FROM dbo.TableName
        GROUP BY Name
        

        然后在您的表示层中,您可以担心有条件地在括号中显示大于 1 的 NameCount

        如果你的表现层是SQL,请忽略我的建议:)

        【讨论】:

          猜你喜欢
          • 2021-03-16
          • 2022-01-11
          • 2011-12-27
          • 1970-01-01
          • 2013-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-03
          相关资源
          最近更新 更多