我有一个主键为(state+city)
和其他columns (product1, product2, product3, product4)
的表。我正在尝试创建一个新表,其中每一行将对应于(state+city)
和产品(其中之一)和一些static_value列。如何在PostgreSQL查询中执行此操作?
最好查看我正在查看的输入和输出数据的示例。在该论坛上,我检查了各种在MySQL或SQL Server中将行转换为列的示例,但它们似乎无济于事。
示例数据表(“输入表”和“所需输出”标签)
答案 0 :(得分:3)
您可以使用并集全部一次选择一个列,如下所示。您可以根据需要向每个SELECT查询添加其他列(TextA,TextB,Date ...)。
SELECT State,City,'Product1' Product, Product1 Value FROM your_table
UNION ALL
SELECT State,City,'Product2' Product, Product2 Value FROM your_table
UNION ALL
SELECT State,City,'Product3' Product, Product3 Value FROM your_table
UNION ALL
SELECT State,City,'Product4' Product, Product4 Value FROM your_table
答案 1 :(得分:2)
您可以交叉连接,将各个列转换为行:
select t.state, t.city, x.product
form the_table t
cross join lateral (
values (t.product1), (t.product2), (t.product3)
) as x(product)
或更紧凑:
select t.state, t.city, x.product
form the_table t
cross join unnest(array[t.product1, t.product2, t.product3]) as x(product)