使用select语句进行SQL分组

时间:2014-04-02 20:16:07

标签: sql sql-server

我有一个具有唯一名称的表格,以及在下面相同字段中用逗号分隔的相同名称的组合:

Bill
Mark
Steve
Bill, Mark
Mark, Steve
Bill,Mark, Steve

我想将未用逗号分隔的名称分组,以计算名称所在的名称,例如:

Bill 3
Mark 4
Steve 3

将来有人可能会在表中添加另一个名称,因此我不能将Case语句与静态名称一起使用。我想要这样的东西:

SELECT
   Name
FROM
   My_Table
Group By
   Name Like (SELECT Name FROM My_Table Where Name Not Like '%,%')

这可能吗?

2 个答案:

答案 0 :(得分:1)

Select N.Name, COUNT(*) 
FROM (
  SELECT Name
  FROM My_Table
  WHERE Name NOT LIKE '%,%'
) Names N
JOIN My_Table MT
ON (MT.Name LIKE '%' + N.Name  + ',%' OR MT.Name LIKE '%,' + N.Name + '%' OR MT.Name = N.Name)
GROUP BY N.Name

答案 1 :(得分:0)

我没有SQLServer实例来测试它,但是一种可行的方法是只选择简单名称记录,然后选择嵌套的SELECT表达式,它将计算具有该名称的所有记录。像这样:

 SELECT 
   Name, 
   (SELECT COUNT(*) FROM YourTable Y2 WHERE Name LIKE ('%' + Y1.Name + '%'))
   FROM YourTable Y1 WHERE NAME NOT LIKE '%,%'

当然,它会在嵌套名称上失败。 (鲍勃和鲍比,如果他们是不同的人,例如)。更强大的方法需要从逗号周围删除所有空格,并将LIKE表达式构建为三个LIKE ORed在一起。如果你不能像我那样在线创建LIKE值,你可以用SQLServer函数替换string-in-string中的任何值。

但是,说实话,我会预测一个临时的规范化表格,并根据该表格制作报告。