You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle查询需求:按行业代码交替展示SEQ为1与2的记录

实现按行业分组交替显示SEQ=1和SEQ=2的记录

我完全get到你的需求了:按INDUSTRY分组后,每个组里要交替展示SEQ=1和SEQ=2的记录,就像你给的示例那样——行业10里先出一条SEQ1的,再一条SEQ2的,循环排列;行业20也遵循同样的规则。

核心思路

要实现这种交替排列,关键是给每个行业内的SEQ=1和SEQ=2记录分别分配组内序号,然后通过这个序号来控制交替顺序:

  • 对每个INDUSTRY,给SEQ=1的记录按你需要的顺序(比如示例里的TICKER顺序)生成连续行号;
  • 同样给每个INDUSTRY内SEQ=2的记录生成连续行号;
  • 最后按INDUSTRY、组内行号、SEQ排序,就能实现交替展示的效果。

通用SQL解决方案

假设你的表名为your_table,用窗口函数ROW_NUMBER()就能轻松实现(支持绝大多数现代数据库:MySQL 8+、SQL Server、PostgreSQL等):

WITH ranked_records AS (
    SELECT 
        SEQ,
        TICKER,
        INDUSTRY,
        -- 按行业+SEQ分组,给每组内的记录编行号,这里用TICKER排序,你可以换成自己需要的字段
        ROW_NUMBER() OVER (PARTITION BY INDUSTRY, SEQ ORDER BY TICKER) AS group_row_num
    FROM your_table
)
SELECT SEQ, TICKER, INDUSTRY
FROM ranked_records
-- 先按行业分组,再按组内行号排序,最后按SEQ控制交替顺序(先1后2)
ORDER BY INDUSTRY, group_row_num, SEQ;

适配老版本数据库(无CTE支持)

如果你的数据库不支持CTE(比如MySQL 5.x),可以用子查询代替:

SELECT SEQ, TICKER, INDUSTRY
FROM (
    SELECT 
        SEQ,
        TICKER,
        INDUSTRY,
        ROW_NUMBER() OVER (PARTITION BY INDUSTRY, SEQ ORDER BY TICKER) AS group_row_num
    FROM your_table
) AS ranked_records
ORDER BY INDUSTRY, group_row_num, SEQ;

完全匹配你示例的调整

如果想要和你给出的期望结果完全一致(比如行业10里SEQ1顺序是AAPL→FB,SEQ2顺序是IBM→CSCO),可以手动指定排序规则:

WITH ranked_records AS (
    SELECT 
        SEQ,
        TICKER,
        INDUSTRY,
        ROW_NUMBER() OVER (PARTITION BY INDUSTRY, SEQ ORDER BY 
            CASE SEQ 
                WHEN 1 THEN CASE TICKER 
                    WHEN 'AAPL' THEN 1 
                    WHEN 'FB' THEN 2 
                    WHEN 'IBM' THEN 3 
                    WHEN 'CSCO' THEN 4 
                END 
                WHEN 2 THEN CASE TICKER 
                    WHEN 'IBM' THEN 1 
                    WHEN 'CSCO' THEN 2 
                    WHEN 'JNJ' THEN 3 
                    WHEN 'CMPQ' THEN 4 
                END 
            END
        ) AS group_row_num
    FROM your_table
)
SELECT SEQ, TICKER, INDUSTRY
FROM ranked_records
ORDER BY INDUSTRY, group_row_num, SEQ;

执行这段代码后,就能得到你想要的结果:

SEQ TICKER INDUSTRY
1   AAPL   10
2   IBM    10
1   FB     10
2   CSCO   10
1   FEYE   20
2   PANW   20

本质上,这个方案的核心就是通过给同行业同SEQ的记录分配组内行号,让相同行号的SEQ1和SEQ2记录挨在一起,从而实现交替展示的效果。

内容的提问来源于stack exchange,提问作者Landon Statis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:33:56