如何在 SQL Server 中使用 Stuff 函数内的 Group By?

4

我有一个查询,其中使用了stuff方法。它可以正常工作,但只在一个条件下重复相同的数据。

查询:

select fr.repairid, fr.repairName, fr.labourMins, fr.sortOrder,
    stuff(
      (
         select ' ---> ' + groupname,departmentid
         from tblRepairGroup
         where departmentid in(5,6) 
         for XML PATH(''),TYPE
      ).value('.','NVARCHAR(MAX)'),
      1, 5, ''
    ) as allgroup
from tblFlatRateRepair fr 
inner join 
    tblRepairGroup g 
    on fr.parentGroupID = g.groupID 
where fr.repairid in (2,4);

输出 :-

输入图片描述

这个查询在allgroup列中重复了所有部门的allgroup,这是不正确的。它必须只显示每个部门自己的组。我知道我必须通过departmentid group by 这个查询,但无法完成该任务。

我需要像上面的查询结果一样显示我的输出输入图片描述

这里不会为两个部门重复allgroup。

注意:此查询对单个部门有效。

请尝试帮助我纠正这个查询..


1
我觉得问题在于for XML而不是stuff方法。如果您使用它将列连接为单个字符串,可以尝试使用函数,然后可以按departmentid分组并将其链接到主查询之前使用stuff。 - Zelloss
1个回答

1
您需要将内部查询(在STUFF函数中)链接到外部查询:您有一个连接,但它并未应用于该内部SELECT语句,因此STUFF函数始终在找到的第一条记录上操作,而不是相关记录。在“WHERE departmentid IN(5,6)”之后放置以下内容:
AND groupID = fr.ParentGroupID

然后,您可能可以完全删除该JOIN。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接