SQL SERVER Select Distinct ID不工作

SQL SERVER Select Distinct ID不工作,sql,sql-server,distinct,for-xml-path,select-for-xml,Sql,Sql Server,Distinct,For Xml Path,Select For Xml,我试图理解下面的sql Select语句,但我无法正确理解它 Select DISTINCT vc.cid, vt.tid, vc.device, STUFF((select ', ' + c.tName from thumbTbl t2 join tags v ON t2.cid = v.cid join config c on v.tid = c.tid where

我试图理解下面的sql Select语句,但我无法正确理解它

Select DISTINCT vc.cid, vt.tid, vc.device,
    STUFF((select ', ' + c.tName from thumbTbl t2
                    join tags v ON t2.cid = v.cid
                    join config c on v.tid = c.tid
                    where vc.cid = t2.cid
                    group by c.tName 
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(max)'), 1, 1, '') tName
from tags vt
    Inner join thumbTbl vc on vt.cid = vc.cid
    Left join config vtc on vt.tid = vtc.tid
order by vc.cid asc
结果如下:

cid tid device      tName
--- --- ---------   ---------
159 7   Mat Dwens    Escalation, Follow Up, More Benefits
159 11  Mat Dwens    Escalation, Follow Up, More Benefits
159 12  Mat Dwens    Escalation, Follow Up, More Benefits
160 7   Jeniffer P    Rectro
162 8   Marc Novice   More Benefits, Rectro
162 6   Marc Novice   More Benefits, Rectro
165 4   Jeniffer P    Follow up
问题:如何仅显示每个选定Id的一行?我尝试使用SELECT DISTINCT,但仍然给出了与上面相同的结果

我希望看到的结果如下:

有人有什么想法吗?

你要的不是什么特别的东西,而是一个群组,一个tid上的聚合功能。结果是不同的,因为每行的tid值不同,但是,您想要的是最大值。由于缺少样本数据,这是未测试的,但是,我认为这是正确的:

选择vc.cid, MAXvt.tid作为tid, vc.device, 填充选择“,”+c.tName 从thumbtblt2 连接t2上的标记v.cid=v.cid 在v.tid=c.tid上连接配置c 其中vc.cid=t2.cid 按c.tName分组 对于XML路径,键入.value'/text[1]',nvarcharmax',1,2,作为tName-更改为使用.text,并删除了前导空格 从标签 vt.cid=vc.cid上的内部连接拇指TBL vc vt.tid=vtc.tid上的左连接配置vtc 按vc.cid分组, 虚拟仪器 由vc.cid ASC订购; 你要找的并不是什么特别的东西,而是一组人和tid上的聚合功能。结果是不同的,因为每行的tid值不同,但是,您想要的是最大值。由于缺少样本数据,这是未测试的,但是,我认为这是正确的:

选择vc.cid, MAXvt.tid作为tid, vc.device, 填充选择“,”+c.tName 从thumbtblt2 连接t2上的标记v.cid=v.cid 在v.tid=c.tid上连接配置c 其中vc.cid=t2.cid 按c.tName分组 对于XML路径,键入.value'/text[1]',nvarcharmax',1,2,作为tName-更改为使用.text,并删除了前导空格 从标签 vt.cid=vc.cid上的内部连接拇指TBL vc vt.tid=vtc.tid上的左连接配置vtc 按vc.cid分组, 虚拟仪器 由vc.cid ASC订购; 在外部查询中删除SELECT DISTINCT和join to config。然后修复内部查询,使其仅从配置中引入所需内容:

在外部查询中删除SELECT DISTINCT和join to config。然后修复内部查询,使其仅从配置中引入所需内容:


请提供样本数据和所需结果。@GordonLinoff只需添加样本数据,谢谢请提供样本数据和所需结果。@GordonLinoff只需添加样本数据,谢谢在t2上标记v.cid=v.cid这是我声明v的地方。现在,在您的代码中,上面的v未启动。我应该保留它吗?此外,在t2.cid=v.cid上的stuffjoin标记v下的错误语法中,我在这里声明了v。现在,在您的代码中,上面的v未启动。我应该保留它吗?此外,Stuff下的错误语法也起了作用,这就把它拉了出来,只是我不想使用Max和GroupBy函数。除了GroupBy查询,你没有其他方法吗?没有样本数据,我不想冒险猜测,@PatsonLeaner。不过,现在这是一个不同的问题,应该作为一个新问题发布。不过,我确实提供了上述问题的样本数据。这个问题没有样本数据,@PatsonLeaner,只有结果;意外结果和预期结果。但这并没有改变我的评论;如果你想问如何以不同的方式解决问题,那是一个不同的问题,你应该问一个新的问题。将问题更改为该选项将使my和Gordon的答案无效,并将被用户还原,或者很容易导致该问题吸引反对票。将问题更改为无效的现有答案是社区非常不赞成的。这个把戏真的成功了吗?这个把戏成功了,只是我不想使用Max和GroupBy函数。除了GroupBy查询,你没有其他方法吗?没有样本数据,我不想冒险猜测,@PatsonLeaner。不过,现在这是一个不同的问题,应该作为一个新问题发布。不过,我确实提供了上述问题的样本数据。这个问题没有样本数据,@PatsonLeaner,只有结果;意外结果和预期结果。但这并没有改变我的评论;如果你想问如何以不同的方式解决问题,那是一个不同的问题,你应该问一个新的问题。将问题更改为该选项将使my和Gordon的答案无效,并将被用户还原,或者很容易导致该问题吸引反对票。将问题改为无效的现有答案是社区非常不赞成的。
cid tid device      tName
------- ---------   ----------
159 12  Mat Dwens   Escalation, Follow Up, More Benefits
160 7   Jeniffer P  Rectro
162 8   Marc Novice More Benefits, Rectro
165 4   Jeniffer P  Follow up
select vc.cid, vt.tid, vc.device,
       stuff((select ', ' + c.tName
              from config c on v.tid = c.tid
              where v.tid = c.tid
              for xml path(''), TYPE
             ).value('.', 'NVARCHAR(max)'
                    ), 1, 1, ''
            ) tNames
from tags vt join
     thumbTbl vc
     on vt.cid = vc.cid
group by vc.cid, vt.tid, vc.device
order by vc.cid asc