【问题标题】:TSQL Group By Issue causing duplicatesTSQL 按问题分组导致重复
【发布时间】:2015-01-08 17:32:14
【问题描述】:

我有一个查询,我创建了哪些输出项目以及谁在展示该项目。我的问题是我正在尝试将演示者分组到项目 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 但它不会使其唯一,因为它们都是不同的。

有什么想法吗?

【问题讨论】:

  • 那篇文章似乎与我的问题完全无关。问题在于我在问题中确定的 group by 子句。
  • 你为什么不发布想要的输出
  • 用所需的输出更新了 OP。
  • @SBB,使用 INNER JOIN(从 dbo.BS_Initiatives 中选择不同的 intID)AS int 而不是 INNER JOIN dbo.BS_Initiatives AS int

标签: tsql stored-procedures sql-server-2012


【解决方案1】:

然而,这可以用这个来解决,因为 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');

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2017-06-03
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多