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

Oracle数据库表关联与行转列查询求助:未得到预期结果

解决Oracle表关联转置问题

现有表结构与数据

学生语言选择表(Student_Langs)

RollNumlang_opted
11
12
25
34

语言对照表(Lang_table)

lang_idlang
1lang1
2lang2
3lang3
4lang4
5lang5

预期结果

RollNumlang1lang2lang3lang4lang5
1YYNNN
2NNNNY
3NNNYN

解决方案SQL语句

方法1:条件聚合(灵活适配语言数量变化)

SELECT
    s.RollNum,
    MAX(CASE WHEN l.lang = 'lang1' THEN 'Y' ELSE 'N' END) AS lang1,
    MAX(CASE WHEN l.lang = 'lang2' THEN 'Y' ELSE 'N' END) AS lang2,
    MAX(CASE WHEN l.lang = 'lang3' THEN 'Y' ELSE 'N' END) AS lang3,
    MAX(CASE WHEN l.lang = 'lang4' THEN 'Y' ELSE 'N' END) AS lang4,
    MAX(CASE WHEN l.lang = 'lang5' THEN 'Y' ELSE 'N' END) AS lang5
FROM
    (SELECT DISTINCT RollNum FROM Student_Langs) s
CROSS JOIN Lang_table l
LEFT JOIN Student_Langs sl ON s.RollNum = sl.RollNum AND l.lang_id = sl.lang_opted
GROUP BY s.RollNum
ORDER BY s.RollNum;

方法2:Oracle PIVOT语法(适合固定列场景)

WITH Student_Lang_Flags AS (
    SELECT
        sl.RollNum,
        l.lang,
        'Y' AS flag
    FROM Student_Langs sl
    JOIN Lang_table l ON sl.lang_opted = l.lang_id
)
SELECT
    RollNum,
    COALESCE(lang1, 'N') AS lang1,
    COALESCE(lang2, 'N') AS lang2,
    COALESCE(lang3, 'N') AS lang3,
    COALESCE(lang4, 'N') AS lang4,
    COALESCE(lang5, 'N') AS lang5
FROM Student_Lang_Flags
PIVOT (
    MAX(flag)
    FOR lang IN ('lang1' AS lang1, 'lang2' AS lang2, 'lang3' AS lang3, 'lang4' AS lang4, 'lang5' AS lang5)
)
ORDER BY RollNum;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:35:35