2013-04-04 4 views
2

У меня есть таблица со столбцами salesID,paymentType,price в SQL Server 2005.как оптимизировать этот запрос?

create table sales(id int IDENTITY(1,1), 
        paymentType varchar(2), 
        price decimal(10,2) default(0) 
       ) 

Есть ли способ сделать это в одном запросе?

SELECT SUM(price) as TE 
FROM sales 
WHERE paymentType = 'E' 

SELECT SUM(price) as TC 
FROM sales 
WHERE paymentType = 'C' 

ответ

4

Вы можете использовать SUM() и CASE(), чтобы достичь того, чего вы хотите.

SELECT SUM(CASE WHEN paymentType = 'E' THEN price ELSE 0 END) TE, 
     SUM(CASE WHEN paymentType = 'C' THEN price ELSE 0 END) TC 
FROM TableName 
WHERE paymentType IN ('E','C') 

Там WHERE необходимо, чтобы фильтровать по платежам и не сканировать всю таблицу. Вам также необходимо добавить индекс на столбец paymentType, чтобы улучшить производительность.

+0

спасибо большое, у меня есть вопрос, если я использую Где paymentType = «E» будет сканировать ВСЕ таблицу? –

+0

если у вас есть указатели, то нет. иначе да. –

+0

Результат этого запроса запроса будет двухколоночным результатом: 'TE' и' TC' –

6

Вы можете использовать GROUP BY для группировки значений по paymentType и получить две записи «E» и «C» с суммами

SELECT paymentType,SUM(price) 
FROM sales 
WHERE paymentType = 'E' or paymentType = 'C' 
GROUP BY paymentType 
+0

спасибо за быстрый ответ :) –

Смежные вопросы