如果有多个记录,则在名称后返回计数

时间:2014-01-19 22:59:00

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

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

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

4 个答案:

答案 0 :(得分:2)

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 :(得分:1)

当数字大于1时,您希望数字在有条件的括号中<:<>

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

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

答案 2 :(得分:0)

只需使用“分组依据”即可。

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

答案 3 :(得分:0)

虽然这里有很多答案告诉你如何在SQL中完成所有操作,但我认为你应该只是从查询中返回原始数据:

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

然后在您的演示文稿图层中,您可以担心当括号中的NameCount超过1时会有条件地显示。{/ p>

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