2016-08-09 6 views
2

Я не уверен, как сделать следующее в SQL. Я пытался использовать GROUP BY и HAVING по-разному, но никто не работает.Объединение записей в SQL

У меня есть таблица вроде этого:

Title Value 1 Value 2 ... 
0  3   7 
1  4   8 
2  5   9 
(empty) 6   10 
0  1   2 

Здесь (empty) не является строкой. Я просто положил его туда, чтобы показать, что эта ячейка таблицы - empty(null). Я хочу отобразить эту таблицу только с одним изменением. Все строки с заголовком 0 or (empty): «объединены» в одну строку, с заголовком 0 и значением 1 = Sum(all Value 1s), значение 2 = Sum(all Value 2s). Все остальное остается прежним. Так, в приведенном выше примере, я хочу видеть:

Title Value 1 Value 2 ... 
0  10  19 
1  4   8 
2  5   9 

Может кто-нибудь, пожалуйста, помогите?

Спасибо!

+0

Целое столбец не может быть пусто – Strawberry

+0

@Strawberry: ??? –

+0

@ThorstenKettner ???? – Strawberry

ответ

3

Это объединение запросов с case:

select (case when title is null or title = 0 then 0 else title end) as title, 
     sum(value1) as value1, sum(value2) as value2 
from t 
group by (case when title is null or title = 0 then 0 else title end) 
order by title; 

Если вы хотите, вы можете также использовать логику:

select coalesce(title, 0) as title, 
     sum(value1) as value1, sum(value2) as value2 
from t 
group by coalesce(title, 0) 
order by title; 
2

Вы можете попробовать это:

SELECT 
IF(Title ='(empty)',0,Title) AS title_col, 
SUM(value1) as Value_1, 
SUM(value2) as Value_2 
FROM your_table 
GROUP BY title_col; 

Примечание:

Если столбец Title фактически содержит эту строку (empty), то можете перейти по этому запросу.

EDIT:

Если тип данных столбца является INT, то он может иметь нулевое значение, если он объявлен как ALLOW NULL.

Если да, то этот запрос будет изменен, как показано ниже:

SELECT 
IF(Title IS NULL,0,Title) AS title_col, 
SUM(value1) as Value_1, 
SUM(value2) as Value_2 
FROM your_table 
GROUP BY title_col; 
+0

Спасибо, но, как я уже сказал, (пустой) не является строкой. Я просто положил ее туда, чтобы показать, что эта ячейка пуста –

+0

Тогда это пустая строка? Или пустая строка? Кстати, что такое тип столбца заголовка? – 1000111

+0

Null. Тип столбца на самом деле int. Имя «title» вводит в заблуждение, но я не выбрал его. –

1

Я вижу два запроса, один для заголовков записей и один для агрегации нетитульных записей. Используйте UNION ALL склеить два результата вместе:

select title, value1, value2 
from my table where coalesce(title, 0) <> 0 
union all 
select 0, sum(value1), sum(value2) 
from my table where coalesce(title, 0) = 0 
group by title 
order by title; 

(В случае, когда все title <> 0 были уникальными в таблице, можно использовать один запрос с group by coalesce(title, 0) вместо этого.)

+0

Я уже нашел решение, прежде чем вы отправили сообщение, но этот тоже очень хороший. –

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