【问题标题】:Joining two tables on keys where key name is column names在键名是列名的键上连接两个表
【发布时间】:2021-06-17 15:18:43
【问题描述】:

我正在尝试连接两个表,其中第一个表包含 ID 和度量。

Skey | ID | Measure
1    | A1 | 12
2    | A1 | 34
3    | A2 | Green
4    | A4 | 0.00005

第二个表包含表名ID和ID数据类型。

ID | DataType
A1 | int
A2 | character
A4 | decimal

我想使用这些表进行连接,结果如下表

Skey | ID | int | character | decimal
1    | A1 | 12  |    NA     |   NA
2    | A1 | 34  |    NA     |   NA
3    | A2 | NA  |   Green   |   NA
4    | A4 | NA  |    NA     | 0.00005

这可以吗?如果是,需要了解其逻辑和实现方式。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql join amazon-redshift


【解决方案1】:

真有趣!您可以join 并使用case

select t1.skey, t1.id,
       (case when t2.type = 'int' then cast(t2.measure as int) end) as int_col,
       (case when t2.type = 'character' then cast(t2.measure as varchar(255)) end) as int_col,
       (case when t2.type = 'int' then cast(t2.measure as decimal) end) as decimal_col
from table1 t1 join
     table2 t2
     on t1.id = t2.id;

几个注意事项:

  • 您可能希望字符串列具有不同的长度、字符集或排序规则。具体操作方式取决于数据库。
  • 有些数据库会将字符串'0.0005' 转换为0.0005,有些会转换为0。您可能需要包含实际转换的精度和比例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多