Sql 旋转红移表

Sql 旋转红移表,sql,pivot,amazon-redshift,Sql,Pivot,Amazon Redshift,我想我需要调整我的数据库。。。或者,我可以使用其他函数来获得我想要的结果。下面是我当前数据集的样子(我实际上有大约15个指标): 整个列在SQL中已经有逻辑,如果任何度量值是红色的(即使它们也是黄色的),那么就说“红色”,如果有则说“黄色”。也有两种情况下,两个指标可以是黄色、红色等。我想做的是添加一个新列,具体显示哪个指标(或多个指标)导致了红色或黄色的总体值。我想的是某种透视,对于每个ID,将度量作为行值,相应的颜色也作为行值(如果有意义的话),然后我可以执行listagg函数,然后根据ID

我想我需要调整我的数据库。。。或者,我可以使用其他函数来获得我想要的结果。下面是我当前数据集的样子(我实际上有大约15个指标):

整个列在SQL中已经有逻辑,如果任何度量值是红色的(即使它们也是黄色的),那么就说“红色”,如果有则说“黄色”。也有两种情况下,两个指标可以是黄色、红色等。我想做的是添加一个新列,具体显示哪个指标(或多个指标)导致了红色或黄色的总体值。我想的是某种透视,对于每个ID,将度量作为行值,相应的颜色也作为行值(如果有意义的话),然后我可以执行listagg函数,然后根据ID将该表连接回原始数据集

透视示例,忽略col2和col3

+----------------------------------+---------+------------------------+----------------+
|               ID                 | col1    |          col2          | col3           |
+----------------------------------+---------+------------------------+----------------+
| 1                                | Red     |                        |                |
| 1                                | Yellow  |                        |                |
| 3                                |  Yellow |                        |                |
+----------------------------------+---------+------------------------+----------------+

在这之后,我可以列出该表以捕获多种颜色,然后将其加入到原始表中。我唯一要忽略的是,如果一个ID同时有红色和黄色度量,然后我做一个listagg,这将同时带来红色和黄色,即使总体值基于红色度量。希望SQL专家能在这里帮助我。

红移目前基于Postgres 8.03,因此它缺少了过去几年中我们期望从Postgres获得的许多功能。因此,试图想出一个涉及
unnest
array
lateral
的解决方案是不可能的(我通过艰苦的学习获得了这一点)

因此,除非所有这些新特性都可用,否则您可以通过使用
union all
并为每个度量列创建一个union来取消对源表的绑定,并创建一组每个id及其度量

select a.id, metrics.metric
from tbl a
inner join (
    select id, metric1 metric from tbl where metric1 is not null
    union all select id, metric2 from tbl where metric2 is not null
    union all select id, metric15 from tbl where metric15 is not null
) metrics ON metrics.id = a.id
order by a.id, metrics.metric
结果

id | item
---+--------
1  | red
1  | yellow
2  | blue
2  | green
2  | pink
3  | orange

如果您的起点是SQL的结果,您最好向我们显示起始数据和起始SQL。然后明确你想要的最终结果。“我使用红移已经5年多了,所以我相信我能帮上忙,但是你的问题太模糊和杂乱无章了,对不起。”MatBailie起点是我发布的第一张表。它是由一系列连接和case when创建的。每个“度量”列都只是使用其他字段创建的逻辑字段。我想要的最终结果是我发布的第二张表。表1没有重复的ID,大约有15个度量。表2有重复的ID,因为一个ID可以有多个度量的值(因此是pivot),然后,正如我所说的,您应该显示连接之前的数据和case when。这是你的起始数据。旋转通常可以同时进行。与创建平面文件格式,然后旋转不同,您只需创建规范化格式即可(性能更好,代码更简单,等等)。对于所需的结果,您似乎缺少至少一列,即红色或黄色的MEDIC名称/标识符。您还可以说,然后您希望将listagg()放在它上面,并将它连接回第一个表。因此,这不是最终期望的结果。请显示实际输入示例和实际期望输出,而不是中间步骤的不完整示例。您的颜色顺序错误<代码>红色、黄色、粉色、绿色、紫色、橙色和蓝色,我可以唱彩虹,唱彩虹,也可以唱彩虹。
id | item
---+--------
1  | red
1  | yellow
2  | blue
2  | green
2  | pink
3  | orange