我正在尝试改进一些查询性能,查询的结构如下:
select 'Total_amount',(select SUM(Total) from dbo.Invoices i where i.BU = bun.BU),case when (select SUM(Total) from dbo.Invoices i where i.BU = bun.BU) > 100000 then 'Good' else 'Not good' end from dbo.BusinessUnits bun
我知道这个例子可以使用连接来解决,但在我的真实查询中我需要子查询.
正如您可能注意到的,我有两次相同的子查询,一个用于给出实际值,另一个用于计算状态.
解决方法
您可以尝试使用OUTER APPLY,如下所示: –
select 'Total_amount',SumTotal,case when SumTotal > 100000 then 'Good' else 'Not good' end from dbo.BusinessUnits bun OUTER APPLY (select SUM(Total) from dbo.Invoices i where i.BU = bun.BU) CA(SumTotal)
特别感谢MARTIN SMITH指出!!