oracle 将查询结果分为两个不同的列[已关闭]

r9f1avp5  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(87)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

上个月关门了。
Improve this question
我的查询结果如下:
| | |
| --|--|
| P2_AU_CE| P2_03|
| P2_AU_CE| P2_04|
| P2_CN_MOCE_001| P2_04|
我希望结果以这种方式显示:
| | | |
| --|--|--|
| P2_AU_CE| P2_03| P2_04|
| P2_CN_MOCE|空|P2_04|

gab6jxml

gab6jxml1#

尝试此SQL查询以获得所需的结果。在此查询中,第一列中的行按值分组,对于条件聚合,则用于将第二列中的值分散到单独的列中。通过使用COALESCE函数,空单元格被替换为文本“EMPTY”。

SELECT
    first_column AS P2_AU_CE,
    COALESCE(MAX(CASE WHEN second_column = 'P2_03' THEN second_column END), 'EMPTY') AS P2_03,
    COALESCE(MAX(CASE WHEN second_column = 'P2_04' THEN second_column END), 'EMPTY') AS P2_04
FROM your_table
GROUP BY first_column;

希望它能起作用:)

2fjabf4q

2fjabf4q2#

要在希望透视数据并以不同格式显示数据的情况下实现所需的结果,可以使用SQL将行透视为列。由于第二列中的值(“P2_03”和“P2_04”)应该成为列标题,因此可以使用条件聚合来实现这一点。下面是用于透视数据的SQL查询:

SELECT 
LEFT(column1, CHARINDEX('_', column1 + '_') - 1) AS Col1,
MAX(CASE WHEN column2 = 'P2_03' THEN column2 ELSE 'EMPTY' END) AS P2_03,
MAX(CASE WHEN column2 = 'P2_04' THEN column2 ELSE 'EMPTY' END) AS P2_04
FROM your_table_name
GROUP BY LEFT(column1, CHARINDEX('_', column1 + '_'))

请将your_table_name替换为表的实际名称。此查询使用LEFT和CHARINDEX函数提取column1下划线之前的第一部分,然后使用条件聚合将数据透视为所需的格式。如果列1的特定组合在列2中没有对应的值,则将显示“EMPTY”。
结果如下所示:

Col1    | P2_03 | P2_04
----------------------------
P2_AU_CE    | P2_03 | P2_04
P2_CN_MOCE  | EMPTY | P2_04

此查询将给予您所需的输出,其中column2中的值将成为单独的列。

ecfsfe2w

ecfsfe2w3#

您可以尝试使用STRING_AGG()函数将P2_03P2_04列中的非空值连接到一个字符串,该字符串由斜杠“分隔”。|'.
但是如果值是'NULL',那么你将使用字符串'EMPTY'。

SELECT
    "P2_AU_CE",
    STRING_AGG(CASE WHEN "P2_03" IS NOT NULL THEN "P2_03" ELSE 'EMPTY' END, ' | ') AS "P2_03",
    STRING_AGG(CASE WHEN "P2_04" IS NOT NULL THEN "P2_04" ELSE 'EMPTY' END, ' | ') AS "P2_04"
FROM
    your_table
GROUP BY
    "P2_AU_CE"

相关问题