转置表的一部分并将列名保存为新列值[PostgreSQL]

tkqqtvp1  于 2023-02-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(106)

我如何转置表的一部分,将列名保存为新的列值,并将这些列值合并为一个?
有没有办法不用硬编码就能做到这一点?
例如,我有这样的结构表:
我试过使用交叉表,但不知道如何提取列名。也试过迭代列名生成一组记录,但主要问题是源表是巨大的。
| 仓库|产品|有折扣|缺货|
| - ------|- ------|- ------|- ------|
| 约翰商店|椅子|假|真的|
| 某商店|桌|真的|假|
因此,我需要这样的结构输出:
| 仓库|产品|参数|现况|
| - ------|- ------|- ------|- ------|
| 约翰商店|椅子|有折扣|假|
| 约翰商店|椅子|缺货|真的|
| 某商店|桌|有折扣|真的|
| 某商店|桌|缺货|假|

vhmi4jdf

vhmi4jdf1#

除了动态SQL之外,你还需要知道列名并将它们“硬编码”到表中。除此之外,你只需要一个联合体:

SELECT
  "StoreHouse",
  "Product",
  'HasDiscount' AS "Parameter",
  "HasDiscount" AS "Status"
FROM example
UNION ALL
SELECT
  "StoreHouse",
  "Product",
  'IsOutOfStock' AS "Parameter",
  "IsOutOfStock" AS "Status"
FROM example

也可以按StoreHouseProduct订购。

相关问题