Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL嵌套选择分组依据_Sql_Sql Server - Fatal编程技术网

SQL嵌套选择分组依据

SQL嵌套选择分组依据,sql,sql-server,Sql,Sql Server,我在SQL Server中名为“测试”的表中有一些数据: 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 = Depart

我在SQL Server中名为“测试”的表中有一些数据:

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
现在的问题是输出没有按部门分组。取而代之的是,所有的人都包括在金融中,然后又包括在金融中

我错在哪里

提前谢谢


电流输出为:

<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>

人1
人2
人3
人4
人5
人1
人2
人3
人4
人5
但我期望的结果是:

<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>

人2
人5
人1
人3
人4

您需要使用别名,因为您有两个对
测试表的引用:

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
。它们都是指内部的
测试
,因此它们只选择部门的非空值