Интересно, есть ли лучший способ написать этот SQL?
CREATE TABLE #OrderTotals( [OrderID] uniqueIdentifier NULL, OrderTotal money
NULL)
CREATE NONCLUSTERED INDEX IDX_OrderTotals ON #OrderTotals(OrderID)
Insert #OrderTotals (OrderID, OrderTotal)
SELECT o.Id,
(CASE when o.OrderStatusId in (5,6,7) then
SUM(ISNULL(oi.[Price],0)*
ISNULL(oi.[InvoicedQty] ,0)+ ISNULL(oi.[TotalTax] ,0))
When o.OrderStatusId not in (5,6,7) then
SUM(ISNULL(oi.[Price],0)*(ISNULL(oi.[Quantity] ,0)
- ISNULL(oi.[DeniedQuantity] ,0)) + ISNULL(oi.
[TotalTax] ,0)) end) as OrderTotal
FROM orderItem oi
inner join [Order] o on o.Id = oi.orderId
WHERE (o.Code = 'abc')
group by o.id, o.OrderStatusId
CASE снижает производительность. Думаю, это делает запрос медленным. Мне нужна вот эта логика, просто интересно, есть ли лучший, более эффективный способ ее написания.
Вот мой план выполнения