在组后插入空行

643ylb08  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(381)

我有一个包含事务数据的表。具有相同“group\u id”的行是同一事务的一部分。我正在运行以下sql查询来显示所有事务:select*from transactions
当我运行这个查询时,我得到了一个所有事务的列表。但是这个庞大的列表使得用不同的方法分离数据变得困难 group_id 从其他数据中。
因此,我想在组\u id的末尾添加一个空行,因此得到: 1 1 (empty row) 2 2 2 而不是: 1 1 2 2 2 有人能帮我吗?
这是我的数据库:http://sqlfiddle.com/#!9/b9bf79/1号

dsekswqp

dsekswqp1#

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

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

这将插入一行 id 在每个组id之后设置为null。
由于 group by .
groupbyid确保所有行都显示出来(您的模式没有显示它,但是我假设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

但是空值首先被排序,所以“间隙”在每个部分的前面

1szpjjfi

1szpjjfi2#

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

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

很明显,如果将来有更多的组ID,这可以添加到中,但是这不是一个通用的解决方案,您最好在应用程序代码中处理这样的外观问题。

相关问题