【发布时间】:2021-01-23 17:58:46
【问题描述】:
在以前的帖子中,请参见此处: How update a table in Big Query where the name of fields to update are values in another table
我有两个表和以下问题:
表 1:
+-------+------------+---------+
| ID | field_name | value |
+-------+------------+---------+
| 1 | usd | 10.08 |
| 1 | gross_amt | 52.0 |
| 1 | jpy | 30.05 |
| 2 | usd | 50.0 |
| 2 | eur | 50.0 |
| 3 | real_amt | 210.43 |
| 3 | total | 320 |
| 4 | jpy | 23.45 |
| 4 | name | john |
| 4 | city | utah |
+-------+------------+---------+
表 2:
+-----+-------+-----------+----------+---------+------+-------+-------+-------+-----------+----------+-------+-----+----------+
| ID | name | last_name | date1 | counrty | city | usd | eur | jpy | gross_amt | real_amt | total | ... | field200 |
+-----+-------+-----------+----------+---------+------+-------+-------+-------+-----------+----------+-------+-----+----------+
| 1 | jane | doe | 19900108 | usa | LA | 9.08 | 0.00 | 29.05 | 50.0 | 52.0 | 900.0 | ... | value200 |
| 2 | lane | smith | 19900108 | usa | LA | 40.8 | 40.0 | 0.00 | 100.0 | 70.0 | 290.0 | ... | value200 |
| 3 | mike | hoffa | 19900108 | usa | SF | 5.05 | 0.00 | 0.00 | 10.0 | 25.0 | 100.0 | ... | value200 |
| 4 | paul | doe | 19900108 | usa | NY | 1.00 | 0.00 | 29.05 | 45.0 | 55.0 | 110.0 | ... | value200 |
+-----+-------+-----------+----------+---------+------+-------+-------+-------+-----------+----------+-------+-----+----------+
需要更新表2中字段的值,即表1中field_name列的值,用表1列value的值,两个表的ID相同,除此之外,表1中value列的数据类型是字符串,但表2中要更新的列的数据类型不同,尤其是数字(numeric, int64, float64)
上面的表格是一个例子,实际问题的表 2 有 200 个字段,在表 1 中,对于一个 ID,每天可以修改数千条记录,最多可以修改 40 个值
但现在我有一个新问题
在新表1(表3)中:
表 3:
+-------+------------+---------+-----------------------+------------------+
| ID | field_name | value | value_replaced_table2 | diff |
+-------+------------+---------+-----------------------+------------------+
| 1 | usd | 10.08 | 9.08 | abs(10.08-9.08) |
| 1 | gross_amt | 52.0 | 50.0 | abs(52.0-50.0) |
| 1 | jpy | 30.05 | 29.05 | abs(30.05-29.05) |
| 2 | usd | 50.0 | 40.08 | abs(50.0-40.0) |
| 2 | eur | 50.0 | 40.0 | ...... |
| 3 | real_amt | 210.43 | 25.0 | ...... |
| 3 | total | 320 | 100.0 | ...... |
| 4 | jpy | 23.45 | 29.05 | abs(23.45-29.05) |
| 4 | name | john | paul | john |
| 4 | city | utah | NY | utah |
+-------+------------+---------+-----------------------+------------------+
我需要在value_replaced_table2列的新表1(表3)中插入表2中替换的值,从而将替换的值存储在上面的表2中,并计算两个值之间的差异,(新值更新和替换表2中的旧值,注意新表1(表3)的数据类型是string,表2的数据类型是(numeric, int64, float64)
从现在开始,感谢您的回答!
【问题讨论】:
标签: sql google-bigquery sql-update sql-insert execute-immediate