0

我正在尝试通过下面的这个 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

问题:如何仅显示每个 Selected Id 的 1 行?,我尝试使用SELECT DISTINCT但仍然给了我与以上相同的结果。

我想看到的结果必须如下所示:

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

有人有想法吗?

4

2 回答 2

2

这不是DISTINCT你追求的,它是一个GROUP BY和一个聚合函数tid。结果 DISTINCT因为您tid在每一行上都有不同的值,但是,您想要的是MAX. 由于缺乏样本数据,这是未经测试的,但是,我认为这是正确的:

SELECT vc.cid,
       MAX(vt.tid) AS 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('(./text())[1]', 'nvarchar(max)'),1,2,'') AS tName --Changed to use .text() and also removed leading space
FROM tags vt
     INNER JOIN thumbTbl vc ON vt.cid = vc.cid
     LEFT JOIN config vtc ON vt.tid = vtc.tid
GROUP BY vc.cid,
         vc.device
ORDER BY vc.cid ASC;
于 2020-12-08T11:28:41.187 回答
0

删除外部查询中的SELECT DISTINCT和连接config。然后修复内部查询,使其只带来您想要的内容config

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
于 2020-12-08T11:30:00.647 回答