SQLite中如何将两个表的指定列值按交替方式组合
实现两个表数据的交替排列
要实现你想要的交替组合效果,核心思路是给两个表的每行绑定一个对应的序号,再通过序号+来源表标记来控制最终排序顺序,具体可以这样操作:
步骤说明
- 给每行分配对应行号:用
ROW_NUMBER()函数,分别给tab.1和tab.2的每行按顺序生成连续行号(因为两个表的数据本身是有序的,直接按col1排序生成行号即可)。 - 标记来源表:给每个表的结果加一个标识字段(比如
source),用来区分数据来自tab.1还是tab.2,方便后续排序时控制顺序。 - 合并后按规则排序:用
UNION ALL合并两个表的处理结果,然后先按行号分组,同一行号下优先取tab.1的数据,再取tab.2的数据。
完整SQL代码
SELECT col1 FROM ( -- 处理tab.1,生成行号和来源标记 SELECT col1, ROW_NUMBER() OVER (ORDER BY col1) AS rn, 1 AS source FROM tab.1 UNION ALL -- 处理tab.2,生成对应行号和来源标记 SELECT col1, ROW_NUMBER() OVER (ORDER BY col1) AS rn, 2 AS source FROM tab.2 ) AS combined_result -- 先按行号排序,同一行号下优先显示tab.1的数据 ORDER BY rn, source;
效果验证
执行这段SQL后,返回的结果正好是你需要的:1、56、2、66、3、88。
如果后续两个表的行数不一致,多出来的行会按行号顺序排在所有对应行的后面,比如tab.1有4行、tab.2有3行的话,tab.1的第4行数据会排在所有tab.2数据之后。
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

