【问题标题】:Convert row record to column for each emp using sql使用sql将每个emp的行记录转换为列
【发布时间】:2016-08-11 10:00:23
【问题描述】:

我有一张桌子tb_phone

person_number    home_number   mobile_number work_number
1                34646         989938377      9800
2                 83837        981083737      890
3                 64746        982726666      8373

如果 work_number 存在,则 phone_type 为“W”,如果手机号码不为 null,则为“M”,如果 home 不为 null,则为“H”

person_number    PHONE_number   phone_type
 1                  34646         H
 1                  989938377     M
 1                  9800          W
 2                  83837         H
 2                  981083737     M
 2                  890           W

这可以通过任何查询吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    UNION ALL,每个号码类型选择一个:

    select person_number, home_number as PHONE_number, 'H' from tb_phone
    UNION ALL
    select person_number, mobile_number, 'M' from tb_phone
    UNION ALL
    select person_number, work_number,   'W' from tb_phone
    

    也许您想在每个选择中添加WHERE xyz_number is not null 以避免出现空数字?

    【讨论】:

    • Oracle 可以在列别名前使用as。它不接受表别名前的as
    • 谢谢,删除了那部分。
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多