如何在SQL中引用自定义字段

Nat*_*han 4 sql sql-server

我正在使用mssql并且在使用子查询时遇到问题.真正的查询非常复杂,但它具有与此相同的结构:

select 
  customerName, 
  customerId,
  (
    select count(*) 
    from Purchases 
    where Purchases.customerId=customerData.customerId
  ) as numberTransactions
from customerData
Run Code Online (Sandbox Code Playgroud)

我想要做的是按交易次数排序表,但是当我使用时

order by numberTransactions
Run Code Online (Sandbox Code Playgroud)

它告诉我没有这样的领域.是否有可能做到这一点?我应该使用某种特殊的关键字,例如this,或self

Jon*_*upp 8

使用字段编号,在这种情况下:

order by 3
Run Code Online (Sandbox Code Playgroud)

  • 如果您的查询将来发生变化,这是一种非常糟糕的方法.明确你的选择几乎总是比基于普通性的隐含更好 (3认同)

Amy*_*y B 7

有时您必须与SQL的语法(预期的子句范围)搏斗

SELECT *
FROM
(
select
  customerName,
  customerId,
  (
    select count(*)
    from Purchases
    where Purchases.customerId=customerData.customerId
  ) as numberTransactions
from customerData
) as sub
order by sub.numberTransactions
Run Code Online (Sandbox Code Playgroud)

此外,使用JOIN的解决方案是正确的.查看查询计划,SQL Server应为这两种解决方案提供相同的计划.