我有一个包含交易数据的表。具有相同“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
答案 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"在每个部分前面