以前没有遇到过这种情况,要做的时候有点懵。 望老哥指点,多谢!
有这样一个需求,一个表单主表,一个扩展列表,查询的时候要把扩展列表中的多行转成主表多列。
比如
id | type | title |
1 | 1 | 表单 1-1 |
2 | 1 | 表单 1-2 |
3 | 2 | 表单 2-1 |
4 | 2 | 表单 2-2 |
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 都可以)!
1
suiterchik 2019-07-31 16:58:24 +08:00
动态列名还能搞搞,但是你这动态列长度... 貌似没法搞啊,而且你这么查出来也没法落到某个表里
所以这个逻辑放到后端处理吧 |
2
tohert OP @suiterchik 好吧, 这个感觉用 SQL 是有点牵强了。
|