我有一个具有唯一名称的表格,以及在下面相同字段中用逗号分隔的相同名称的组合:
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 '%,%')
这可能吗?
答案 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中的任何值。
但是,说实话,我会预测一个临时的规范化表格,并根据该表格制作报告。