TSQL Group By Issue 导致重复

TSQL Group By Issue causing duplicates

我创建了一个查询,它输出项目以及谁在展示项目。我的问题是我正在尝试将演示者分组到项目 ID,以便它在项目 ID 下列出演示者,而不是多次包含它。

这是我的查询:

DECLARE @agendaID AS INT = '23';

SELECT 
   (SELECT att.empID,
           emp.firstName,
           emp.lastName,
           emp.ntid
    FROM   dbo.BS_ProjectReview_Attendees AS att
           LEFT OUTER JOIN
           dbo.EmployeeTable AS emp
           ON att.empID = emp.EmpID
    WHERE  att.agendaID = @agendaID
    FOR    XML PATH ('attendee'), TYPE, ELEMENTS, ROOT ('attendees')),
   (SELECT pres.intID,
           int.intTitle,
           (SELECT emp.firstName,
                   emp.lastName,
                   emp.ntid
            FROM   dbo.EmployeeTable AS emp
            WHERE  emp.EmpID = pres.empID
            FOR    XML PATH ('presenter'), TYPE, ELEMENTS, ROOT ('presenters'))
    FROM   dbo.BS_ProjectReview_ProjectPresenters AS pres
    INNER JOIN dbo.BS_Initiatives AS int
    ON pres.intID = int.intID
    WHERE  pres.agendaID = @agendaID
    GROUP BY int.intID <----- ISSUE IS HERE
    FOR    XML PATH ('project'), TYPE, ELEMENTS, ROOT ('projects'))
FOR    XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root');

这是我的 XML 输出:

  <root>
<data>
<attendees>
  <attendee>
    <empID>1234</empID>
    <firstName>Mike</firstName>
    <lastName>Smith</lastName>
    <ntid>msmith</ntid>
  </attendee>
</attendees>
<projects>
  <project>
    <intID>202</intID>
    <intTitle>Infrastructure Expansion</intTitle>
    <presenters>
      <presenter>
        <firstName>Bob</firstName>
        <lastName>Jones</lastName>
        <ntid>bjones</ntid>
      </presenter>
    </presenters>
  </project>
  <project>
    <intID>202</intID>
    <intTitle>Infrastructure Expansion</intTitle>
    <presenters>
      <presenter>
        <firstName>User 1</firstName>
        <lastName>Last 1</lastName>
        <ntid>ulast1</ntid>
      </presenter>
    </presenters>
  </project>
</projects>
 </data>
</root>

这是所需的输出:

  <root>
<data>
<attendees>
  <attendee>
    <empID>1234</empID>
    <firstName>Mike</firstName>
    <lastName>Smith</lastName>
    <ntid>msmith</ntid>
  </attendee>
</attendees>
<projects>
  <project>
    <intID>202</intID>
    <intTitle>Infrastructure Expansion</intTitle>
    <presenters>
      <presenter>
        <firstName>Bob</firstName>
        <lastName>Jones</lastName>
        <ntid>bjones</ntid>
      </presenter>
       <presenter>
        <firstName>User 1</firstName>
        <lastName>Last 1</lastName>
        <ntid>ulast1</ntid>
      </presenter>
    </presenters>
  </project>
</projects>
 </data>
</root>

它应该将两个演示者列在同一个 intID 下,但是它重复了它们。

我在使用 group by 子句时遇到错误,因为它不包含在聚合函数中,希望我包含 pres.empID 但它不会使它唯一,因为它们都是不同的。

有什么想法吗?

这可能会用这个解决,但是,由于 SQLFiddle 已关闭 ATM,因此没有示例。

DECLARE @agendaID AS INT = '23';

SELECT 
   (SELECT att.empID,
           emp.firstName,
           emp.lastName,
           emp.ntid
    FROM   dbo.BS_ProjectReview_Attendees AS att
           LEFT OUTER JOIN
           dbo.EmployeeTable AS emp
           ON att.empID = emp.EmpID
    WHERE  att.agendaID = @agendaID
    FOR    XML PATH ('attendee'), TYPE, ELEMENTS, ROOT ('attendees')),
   (SELECT pres.intID,
           int.intTitle,
           (SELECT emp.firstName,
                   emp.lastName,
                   emp.ntid
            FROM   dbo.EmployeeTable AS emp
                INNER JOIN dbo.BS_ProjectReview_ProjectPresenters AS pres ON emp.EmpID = pres.empID
            WHERE pres.intID = int.intID
            FOR    XML PATH ('presenter'), TYPE, ELEMENTS, ROOT ('presenters'))
    FROM   dbo.BS_Initiatives AS int
    WHERE  @agendaID IN ( SELECT pres.agendaID FROM dbo.BS_ProjectReview_ProjectPresenters AS pres WHERE pres.intID = int.intID)
    FOR    XML PATH ('project'), TYPE, ELEMENTS, ROOT ('projects'))
FOR    XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root');