有一个table1,其字段为call_id, param0, param1, param2, ...param30
。参数字段取值 从1到100。
还有第二个表table2,其中包含我需要从第一个表中填写的字段call_id, theme_code
。任务的复杂性在于,对于一个call_id
,我需要将其中的每个param
作为theme_code
,如果其中一个param
为空,则不需要为call_id
创建新记录
示例:表1:
callid | par0 | par1 | par2 | par3 | par4 | par5 | par6 | par7 | par8 | par9 | par10 |
-------------------------------------------------------------------------------------------
1234567 | 24 | 2 | null | 91 | 58 | null | 25 | 19 | 77 | 62 | null |
表2:
callid | theme_code |
------------------------
1234567 | 24 |
------------------------
1234567 | 2 |
------------------------
1234567 | 91 |
------------------------
1234567 | 58 |
------------------------
1234567 | 25 |
------------------------
1234567 | 19 |
------------------------
1234567 | 77 |
------------------------
1234567 | 62 |
1条答案
按热度按时间xxhby3vn1#
您似乎只想将
table1
中的列反透视到多行中:| 呼叫ID|主题代码|
| - -|- -|
| 小行星1234567|二十四|
| 小行星1234567| 2个|
| 小行星1234567|九十一|
| 小行星1234567|五十八|
| 小行星1234567|二十五个|
| 小行星1234567|十九|
| 小行星1234567|七十七|
| 小行星1234567|六十二|
fiddle
您可以阅读更多关于透视和取消透视in this article的内容。
除非
table1
是某种类型的临时表,否则将数据复制到table2
将违反规范化原则,您最好在需要时使用该查询,或者基于该查询创建一个视图(可能是一个物化视图)。如果确实要将未透视的数据放入另一个表中,则可以使用该查询作为
insert
或merge
语句的基础。