Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 Server中?_Sql_Sql Server_Select_Stored Procedures_Sql Order By - Fatal编程技术网

如何';订购人';嵌套在SQL Server中?

如何';订购人';嵌套在SQL Server中?,sql,sql-server,select,stored-procedures,sql-order-by,Sql,Sql Server,Select,Stored Procedures,Sql Order By,我使用SQL Server 2012,并尝试按子查询中的名称对以下查询的结果进行排序,但始终会得到SQL执行错误 我做错了什么或错过了什么 我的查询: SELECT A.EmpID, (SELECT B.EmpID, B.LastName + ', ' + B.FirstName AS TM FROM dbo.EmpTable AS B WHERE B.SupEmpID = A.EmpID) FROM dbo.EmpTable AS A WHERE

我使用SQL Server 2012,并尝试按子查询中的名称对以下查询的结果进行排序,但始终会得到SQL执行错误

我做错了什么或错过了什么

我的查询:

SELECT A.EmpID,
       (SELECT B.EmpID, B.LastName + ', ' + B.FirstName AS TM
        FROM dbo.EmpTable AS B
        WHERE B.SupEmpID = A.EmpID)
FROM  dbo.EmpTable AS A
WHERE  A.NTID = 'someID'
ORDER BY B.LastName + ', ' + B.FirstName

在columnlist中的相关子查询中返回多个列。 这应该会给你一个错误

选择时,只能在选择列表中指定一个表达式 子查询不随EXISTS一起引入

使用联接而不是子查询如何

SELECT A.EmpID,
       B.LastName + ', ' + B.FirstName AS TM
FROM dbo.EmpTable AS A
  INNER JOIN dbo.EmpTable AS B
    ON B.SupEmpID = A.EmpID
WHERE A.NTID = 'someID'
ORDER BY B.LastName + ', ' + B.FirstName

非常感谢-这解决了问题,效果非常好。我会尽快接受。:)假定两个名称中都没有逗号(不太可能),可以通过不进行连接来增加使用索引的可能性。当您在源列上调用函数进行连接/分组/排序(即使是隐式的,比如连接或转换,甚至是基本的数学)时,您这样做是为了使数据库不能使用索引来完成查询的这一部分,从而降低查询速度(优化器有时可以解决这一问题,但这是需要遵守的第一条规则)。