2014-01-03 2 views
1

Существует таблица с названием Product, которая содержит три столбца - name,id and price. В следующем запросе я хочу сделать что-то вроде If id 1,2 и 3, тогда он добавит id 1.id 2 и цену id 3 или если существуют только id 1 и 2, тогда он добавляет только id 1 и id 2's priceИспользование case add different values ​​в sql

select 
    name, 
    id, 

    case 
     when id in(1,2,3) then sum(price) as total 
     else ' ' 
    end 
    case 
     when id in(4,5,6) then sum (price) as total 
     else ' ' 
    end 
from 
    Product 
group by 
    name, 
    id; 

Но он не работает должным образом.

Образец данных:

Name ID PRICE 
A  1 30 
B  2 10 
C  5 20 

Ожидаемый результат:

NAME ID TOTAL 
A 1 40 
B 2 40 
C 5 20 
+2

Делитесь данными примера и ожидаемым результатом – KrazzyNefarious

+0

Вам нужно удалить «цену» из ваших «SELECT» и «GROUP BY», иначе 'SUM' в принципе ничего не делает. –

+0

Но я все еще не работаю так, как хочу – SaNa3819

ответ

0

Если у вас есть уникальный идентификатор, вы можете попробовать Sum() Over():

Select Name, Id, 
    Sum(Price) Over (partition by (case when id in (1,2,3) then 1 else id end)) NewPrice 
From Table1 

Результаты и Fiddle demo:

| NAME | ID | NEWPRICE | 
|------|----|----------| 
| A | 1 |  40 | 
| B | 2 |  40 | 
| C | 5 |  20 | 
+0

спасибо. можете ли вы описать, что происходит над() сделано здесь actucally? – SaNa3819

+0

Конечно, 'Over()' clause используется для разделения данных перед их суммированием. В дополнение к этому, я использовал выражение «Case» для группировки значений Id (1,2,3) вместе. – Kaf

+0

Я нашел ваш неотредактированный ответ намного проще. Вы можете объяснить это? – SaNa3819

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