Вставить пустую строку после группы

0

У меня есть таблица, содержащая данные транзакции. Строки с тем же "group_id" являются частью одной и той же транзакции. Я выполняю следующий SQL-запрос, чтобы показать все транзакции: SELECT * FROM транзакций

Когда я запускаю этот запрос, я получаю как ожидалось список всех транзакций. Но этот большой список затрудняет разделение данных с другой group_id из других данных.

По этой причине я хочу добавить пустую строку в конец group_id, поэтому я получаю: 1 1 (empty row) 2 2 2

вместо: 1 1 2 2 2

Может кто-то помочь мне с этим?

Вот моя база данных: http://sqlfiddle.com/#!9/b9bf79/1

  • 1
    Вы хотите отформатировать вывод данных, но это не то, для чего нужен SQL. Где будет отображаться ваш набор результатов? Вот где можно оформить свои результаты. Если вы хотите посмотреть конкретный group_id просто добавьте предложение WHERE .
  • 0
    Рассмотрим обработку вопросов отображения данных в коде приложения
Теги:

2 ответа

0

вы можете использовать (злоупотреблять) накопительный пакет.

SELECT * 
FROM transactions 
group by group_id, id
with rollup
having group_id is not null

это вставляет строку с id установленным в null после каждого group_id.

mysql также сортирует group_id из-за group by.

Группа по id 'гарантирует, что все строки будут показаны (ваша схема не отображает ее, но я предполагаю, что идентификатор уникален? В противном случае вам нужно добавить другие поля)

Однако только один id будет лишним в дополнительных строках. Остальные столбцы повторяют значение выше.

Вы можете их фильтровать следующим образом:

SELECT 
id,
case id is not null when true then date else null end as date,
case id is not null when true then group_id else null end as group_id
-- ....
FROM transactions 
group by group_id, id
with rollup
having group_id is not null

В качестве альтернативы:

 select * from
 (SELECT * 
 FROM transactions 
 union all
 select distinct null, null, group_id, null, null,null from transactions
 ) as t
 order by 3,1

но сначала нулевые значения сортируются, поэтому "зазор" находится перед каждой секцией

0

Я не предлагаю вам делать это вообще, но если вы просто хотите разделить две группы, вы можете это сделать:

SELECT * FROM transactions WHERE group_id = 1
UNION ALL
(SELECT '','','','','','')
UNION ALL
SELECT * FROM transactions WHERE group_id = 2

Очевидно, это может быть добавлено, если в будущем будет больше идентификаторов групп, но это не решение общего назначения, в котором вы действительно лучше разбираетесь в таких проблемах, как в коде приложения.

  • 0
    Почти искушенный, чтобы понизить ... Я думаю, что ответ должен был быть тем, что прокомментировали другие, OP не демонстрирует понимание.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню