У меня есть хранимая процедура для получения общего количества заказов (в $$$) на определенную дату, и в то же время мне нужно узнать, сколько было транзакции наличными по сравнению с транзакцией кредитной карты. Существуют также другие типы транзакций (например, PayPal), но их не нужно возвращать (не спрашивайте меня, почему).
У меня есть два варианта: написать все в одном запросе или перейти через курсор. Вот мой 1 запрос
SELECT @TotalOrder = SUM([TotalValue]),
@TotalCash = (SELECT SUM([TotalValue]) FROM [dbo].[tblOrder] dbChild WHERE (dbChild.[OrderId] = dbMain.[OrderId]) AND (dbChild.[PaymentType] = 0)),
@TotalCard = (SELECT SUM([TotalValue]) FROM [dbo].[tblOrder] dbChild WHERE (dbChild.[OrderId] = dbMain.[OrderId]) AND (dbChild.[PaymentType] = 1))
FROM [dbo].[tblOrder] dbMain
WHERE [PaymentDate] BETWEEN @StartDate AND @EndDate;
В порядке ли запрос выше? Кроме того, я могу использовать курсор, который перебирает каждую запись и накапливает @TotalOrder, @TotalCash и @ TotalCard.
SELECT [TotalValue], [PaymentType]
FROM [dbo].[tblOrder] dbMain
WHERE [PaymentDate] BETWEEN @StartDate AND @EndDate;
--then use cursor to loop through each of the record.
Что ты думаешь? Какой из них наиболее эффективный? Если оба неэффективны, есть ли у вас какие-либо другие предложения?