SQL SERVER Select Distinct ID不工作
我试图理解下面的sql Select语句,但我无法正确理解它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
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