V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tohert
V2EX  ›  数据库

利用 SQL 语句如何实现多行数据转成多列?

  •  
  •   tohert · 2019-07-31 15:01:44 +08:00 · 1663 次点击
    这是一个创建于 1945 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前没有遇到过这种情况,要做的时候有点懵。 望老哥指点,多谢!

    有这样一个需求,一个表单主表,一个扩展列表,查询的时候要把扩展列表中的多行转成主表多列。

    比如

    dt_zhubiao

    id type title
    1 1 表单 1-1
    2 1 表单 1-2
    3 2 表单 2-1
    4 2 表单 2-2

    dt_kuozhanbiao

    id formid name title value
    1 1 ext_a 工龄 18
    2 1 ext_b 职称 副级
    3 2 ext_a 工龄 20
    4 2 ext_b 职称 正级
    5 3 ext_2a 字段 1 值 1
    6 3 ext_2b 字段 2 值 2
    7 3 ext_2c 字段 3 值 3
    8 4 ext_2a 字段 1 值 21
    9 4 ext_2b 字段 2 值 22
    10 4 ext_2c 字段 3 值 23

    查询时,会根据 dt_zhubiao 表的 type 来查询,type 字段一样时,dt_kuozhanbiao 表条数和 name 都会一致,value 不一致。

    想要的结果如下:

    查询 type=1 时,select * from dt_zhubiao where type = 1 ... 

    id type title ext_a ext_b
    1 1 表单 1-1 18 副级
    2 1 表单 1-2 20 正级

    查询 type=2 时,select * from dt_zhubiao where type =2 ...

    id type title ext_2a ext_2b ext_2c
    3 2 表单 2-1 值 1 值 2 值 3
    4 2 表单 2-2 值 21 值 22 值 23

    那么问题来了,基于 select * from dt_zhubiao where type = ? 基础 sql 语句,如何生成这种查询结果 ? 

    之前在 SQL Server 里试过 join、union 都没有实现出来,困扰许久,望老哥解惑( MYSQL MSSQL 都可以)!

    suiterchik
        1
    suiterchik  
       2019-07-31 16:58:24 +08:00
    动态列名还能搞搞,但是你这动态列长度... 貌似没法搞啊,而且你这么查出来也没法落到某个表里
    所以这个逻辑放到后端处理吧
    tohert
        2
    tohert  
    OP
       2019-08-01 09:22:15 +08:00
    @suiterchik 好吧, 这个感觉用 SQL 是有点牵强了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3365 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.