SQL中的列的键值对,不声明列

SQL中的列的键值对,不声明列,sql,pivot,amazon-redshift,key-value,dynamic-sql,Sql,Pivot,Amazon Redshift,Key Value,Dynamic Sql,我在AWS红移中有一个表,在键值对中有各种各样的键。我试图将这个表转换为一个更传统的结构,其中每个唯一的键都是一列 |---------------------|---------------------|------------------| | ID | Key | Value | |---------------------|---------------------|-----------------

我在AWS红移中有一个表,在键值对中有各种各样的键。我试图将这个表转换为一个更传统的结构,其中每个唯一的键都是一列

|---------------------|---------------------|------------------|
|         ID          |       Key           |        Value     |
|---------------------|---------------------|------------------|
|          a          |          1          |         one      |
|---------------------|---------------------|------------------|
|          a          |          2          |         two      |
|---------------------|---------------------|------------------|
|          a          |          3          |         three    |
|---------------------|---------------------|------------------|
|         ...         |          ...        |         ...      |
|---------------------|---------------------|------------------|

然而,我只是在网上寻找解决方案,在那里你必须显式地键入每个键的潜在值。对我来说,手动编码这些列似乎不是一个可行的解决方案,因为已经有200多个不同的键,而且这个数字还在不断增加

是否有任何方法可以动态生成sql代码以使用sql进行此转换


如果有帮助的话,我可以为所有唯一键创建一个单独的表,但我仍然没有找到将其与SQL查询联系起来的方法。

“*我只是在网上寻找解决方案,您必须显式地键入键的每个潜在值*”-因为这是实现itI的唯一方法我主要使用python,所以我不习惯这些类型的限制。我可能不得不用另一种方式来解决这个问题,主要问题是数据需要在数据库表中创建列。因此,需要首先创建具有适当名称的列,然后将数据转换为新格式。您可以编写一个存储过程,查看键,检查是否存在列,如果不存在,则添加列,然后插入数据。这将是相当缓慢的,因为每一行都需要独立处理。它是用于数据转换的sql+python+jinja基础工具。例如,它支持(这正是您所需要的)。但是,如果您的轴心是您需要的唯一转换,那么dbt强制执行的结构可能是一种过火的行为。
|-----------------|-----------------|--------------|--------------|--------------|
|        Id       |        1        |      2       |      3       |      ...     |
|-----------------|-----------------|--------------|--------------|--------------|
|        a        |       one       |      two     |     three    |      ...     |
|-----------------|-----------------|--------------|--------------|--------------|