在组后插入空行

时间:2018-01-14 21:07:51

标签: mysql sql

我有一个包含交易数据的表。具有相同“group_id”的行是同一事务的一部分。我正在运行以下SQL查询来显示所有事务: SELECT * FROM transactions

当我运行此查询时,我按预期获得所有事务的列表。但是这个大型列表很难将数据与其他数据的group_id分开。

出于这个原因,我想在group_id的末尾添加一个空行,所以我得到: 1 1 (empty row) 2 2 2

代替: 1 1 2 2 2

有人可以帮我这个吗?

这是我的数据库: http://sqlfiddle.com/#!9/b9bf79/1

2 个答案:

答案 0 :(得分:0)

我建议你不要这样做,但如果你只想分开两组,你可以这样做:

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

显然,如果将来有更多的组ID,这可能会增加,但它不是一个通用的解决方案,你最好在应用程序代码中处理这样的外观问题。

答案 1 :(得分:0)

你可以使用(滥用)汇总。

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

这将在每个group_id之后插入一行id设置为null。

由于group by

mysql也将按group_id排序

id由id组确保显示所有行(你的架构没有显示它,但我认为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

但是首先对空值进行排序,因此" gap"在每个部分前面