【问题标题】:How to 'order by' nested in SQL Server?如何在 SQL Server 中嵌套“排序依据”?
【发布时间】:2015-02-14 12:48:20
【问题描述】:

我使用 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

【问题讨论】:

  • 假设两个名称中都没有逗号(不太可能),您可以通过不进行连接来增加使用索引的机会。当您在源列上调用用于连接/分组/排序的函数时(甚至是隐式的,例如使用连接或转换,甚至是基本数学),您会这样做,以便数据库无法使用索引来完成该部分查询,减慢它的速度(好吧,优化器有时可以解决它,但这是一个很好的首要规则)。

标签: sql sql-server select stored-procedures sql-order-by


【解决方案1】:

您在列列表的相关子查询中返回了多个列。 那应该会给你错误

选择列表中只能指定一个表达式,当 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

【讨论】:

  • 非常感谢 - 这解决了问题并完美运行。我会尽快接受。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多