0

SQL Server の「testing」というテーブルにいくつかのデータがあります。

ID  Name    Department
1   Person1 IT
2   Person2 Finance
3   Person3 IT
4   Person4 IT
5   Person5 Finance

私が使用しているSQLクエリは次のとおりです。

SELECT Department AS '@Department',
(
    SELECT Name
    FROM testing
    WHERE Department = Department
    FOR XML PATH ('Person'), TYPE
)
FROM testing
GROUP BY Department
FOR XML PATH ('Department'), TYPE

問題は、出力が部門ごとにグループ化されていないことです。代わりに、すべての人が財務に含まれ、再び IT に含まれます。

どこが間違っていますか?

前もって感謝します


現在の出力は次のとおりです。

<Department Department="Finance">
  <Person>
    <Name>Person1</Name>
  </Person>
  <Person>
    <Name>Person2</Name>
  </Person>
  <Person>
    <Name>Person3</Name>
  </Person>
  <Person>
    <Name>Person4</Name>
  </Person>
  <Person>
    <Name>Person5</Name>
  </Person>
</Department>
<Department Department="IT">
  <Person>
    <Name>Person1</Name>
  </Person>
  <Person>
    <Name>Person2</Name>
  </Person>
  <Person>
    <Name>Person3</Name>
  </Person>
  <Person>
    <Name>Person4</Name>
  </Person>
  <Person>
    <Name>Person5</Name>
  </Person>
</Department>

しかし、私の望ましい出力は次のとおりです。

<Department Department="Finance">
  <Person>
    <Name>Person2</Name>
  </Person>
  <Person>
    <Name>Person5</Name>
  </Person>
</Department>
<Department Department="IT">
  <Person>
    <Name>Person1</Name>
  </Person>
  <Person>
    <Name>Person3</Name>
  </Person>
  <Person>
    <Name>Person4</Name>
  </Person>
</Department>
4

1 に答える 1

1

testingテーブルへの参照が 2 つあるため、エイリアスを使用する必要があります。

SELECT Department AS '@Department',
(
    SELECT Name
    FROM testing t2
    WHERE t2.Department = t.Department
    FOR XML PATH ('Person'), TYPE
)
FROM testing t
GROUP BY Department
FOR XML PATH ('Department'), TYPE

あなたのクエリはDepartment = Department. これらは両方とも inner を参照するtestingため、Department の NULL 以外の値を選択するだけです。

于 2013-07-08T02:15:41.103 に答える