2016-07-04 4 views
1

Моей product таблицы выглядит следующим образом:Раздельные ГДЕ В условиях для каждого столбца

id_product | product_count | product_name 
1   | 10    | name1 
2   | 20    | name2 
3   | 20    | name3 
4   | 52    | name4 
5   | 30    | name5 
6   | 50    | name6 

И я хочу, чтобы сделать запрос, который будет результат:

product_group_name | product_group_name | product_group_name |...more groups 
30(sum)    | 72(sum)   | 50(sum)   |...more values 

, где группа будет id_product, как (1,2 ИЛИ 3,4 ИЛИ 1,4,5), а имя группы будет псевдонимом.

Вот SQL-код, чтобы сделать один столбец:

SELECT 
    cast(SUM(product.product_count) as float) as group_name 
FROM  
    product 
WHERE 
    product.id_product in (608,913,528,529,920,406,407,408,912,919,918,917,924,926,925) 

и результат этого запроса:

| group_name | 
| 200  | 

Можно ли добавить дополнительные столбцы с названиями групп? Для них важно, чтобы они были столбцами, а не строками.

+0

, если я получил U Rigth, да вы can..just использовать кома («») после того, как колонны, .. 'ВЫБРАТЬ бросание (SUM (product.product_count), как поплавок) как GROUP_NAME, сумма (cOLUMN2), как group_name2' –

+0

Я думаю, что вы должны сделать следующие вещи 1). Присоединитесь к таблице product_group 2). Сделайте «Группу по» с помощью group_id и выполните операцию sum() 3). Как только вы получите результаты на вышеуказанном шаге, вы можете перенести результаты с помощью любого из описанных здесь методов - http://stackoverflow.com/questions/13372276/simple-way-to-transpose-columns-and-rows-in -SQL – ArunGeorge

ответ

0

Если я вас правильно понимаю, один из способов сделать это является условной агрегации:

SELECT 
    cast(SUM(
     CASE WHEN product.id_product in (608,913,528, ... ,924,926,925) 
     THEN product.product_count ELSE NULL END) as float) as group_name1 
    ,cast(SUM(
     CASE WHEN product.id_product in (1,2,3) 
     THEN product.product_count ELSE NULL END) as float) as group_name2 
    ,cast(SUM(
     CASE WHEN product.id_product in (4,5) 
     THEN product.product_count ELSE NULL END) as float) as group_name3 
FROM 
    product 
; 
Смежные вопросы