我有一个名为fund_flag的表,其中包含fund_type、fund 1、fund 2、fund 3、fund 4、fund 5、fund 6、sign_瓦尔等列
表格数据如下。
| 基金类型|基金1|基金2|基金3|基金4|基金5|基金6|符号_瓦尔|
| --|--|--|--|--|--|--|--|
| SGP| Y| N| N| N| Y| N|- -一种|
| USD| Y| N| Y| Y| Y| N|+的|
| INR| N| N| Y| N| Y| Y|- -一种|
我想要的输出如下:
| 基金类型|基金名称|基金价值|符号_瓦尔|
| --|--|--|--|
| SGP|基金1| Y|- -一种|
| SGP|基金2| N|- -一种|
| SGP|基金3| N|- -一种|
| SGP|基金4| N|- -一种|
| SGP|基金5| Y|- -一种|
| SGP|基金6| N|- -一种|
| USD|基金1| Y|+的|
| USD|基金2| N|+的|
| USD|基金3| Y|+的|
| USD|基金4| Y|+的|
| USD|基金5| Y|+的|
| USD|基金6| N|+的|
| INR也是如此||||
请帮助我查询。
5条答案
按热度按时间irtuqstp1#
字符串
xn1cxnb42#
您可以使用以下查询来获取所需的输出。以下查询将帮助您说明所需的输出:
字符串
fhity93d3#
要在PostgreSQL中取消透视表,可以使用
UNION ALL
运算符来合并多个SELECT语句,每个语句选择一个列,并添加一个新列来标识原始列名。例如:字符串
也许你也可以参考这个问题:Equivalent to unpivot() in PostgreSQL
hpxqektj4#
动态处理标签。您可以
to_jsonb()
整个记录,而无需硬编码标签列表,-
仅保留您想要的标签,然后jsonb_each()
列出它们。Demo:字符串
| 基金类型|基金名称|基金价值|符号_瓦尔|
| --|--|--|--|
| SGP|基金1|不|- -一种|
| SGP|基金2| F|- -一种|
| SGP|基金3| F|- -一种|
| SGP|基金4| F|- -一种|
| SGP|基金5|不|- -一种|
| SGP|基金6| F|- -一种|
| USD|基金1|不|+的|
| USD|基金2| F|+的|
| USD|基金3|不|+的|
| USD|基金4|不|+的|
| USD|基金5|不|+的|
| USD|基金6| F|+的|
| INR|基金1| F|- -一种|
| INR|基金2| F|- -一种|
| INR|基金3|不|- -一种|
| INR|基金4| F|- -一种|
| INR|基金5|不|- -一种|
| INR|基金6|不|- -一种|
ecfdbz9o5#
在Oracle或SQL Server中,这可以通过UNPIVOT操作符来实现,但在Postgres中不可用。然而,您可以使用
VALUES()
和JOIN LATERAL
来取消透视列:字符串
Demo here