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

如何在同一条SQL查询中为每个SLC_ID批量补全指定数量的空行

解决方案

你现有SQL的问题是内层子查询无法直接引用外层关联的SLC_ID,也没有预先给每个SLC_ID生成完整的10行序列框架,导致只有第一个SLC_ID能正常补全。
可以按以下逻辑调整SQL:

  1. 先提取所有唯一的SLC_ID,和1-10的数字表做笛卡尔积,强制每个SLC_ID都生成10行基础结构
  2. 给原业务表中每个SLC_ID下的PCE_ID单独分组编行号,避免不同SLC_ID的行号冲突
  3. 把基础结构和编好行号的业务数据做左关联,匹配不到的PCE_ID自动为NULL

调整后的SQL如下:

WITH NUMBERS AS (
    SELECT 1 rowNumber
    UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
    UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
    UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
),
-- 提取所有唯一的SLC_ID
UNIQUE_SLC AS (
    SELECT DISTINCT SLC_ID FROM SELECT_PART
),
-- 给每个SLC_ID下的PCE_ID单独排序编行号
PART_RANKED AS (
    SELECT 
        SLC_ID,
        PCE_ID,
        ROW_NUMBER() OVER (PARTITION BY SLC_ID ORDER BY PCE_ID) AS rowNumber
    FROM SELECT_PART
)
SELECT 
    us.SLC_ID,
    n.rowNumber,
    pr.PCE_ID
FROM UNIQUE_SLC us
-- 笛卡尔积生成每个SLC_ID对应的10行框架
CROSS JOIN NUMBERS n
LEFT JOIN PART_RANKED pr 
    ON us.SLC_ID = pr.SLC_ID 
    AND n.rowNumber = pr.rowNumber
ORDER BY us.SLC_ID, n.rowNumber

该写法可以保证每个SLC_ID都固定输出10行,有对应PCE_ID的正常返回值,没有的返回NULL,完全符合你需要的报表输出格式。


内容的提问来源于stack exchange,提问作者Eric Brochu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:36:03