将查询结果分为两个不同的列

问题描述 投票:0回答:2

我的查询结果如下:

  • 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

提前谢谢您!

mysql postgresql oracle hana
2个回答
0
投票

尝试此 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;

希望它有效:)


0
投票

要实现所需的结果(您想要旋转数据并以不同的格式显示数据),您可以使用 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 下划线之前的第一部分,然后使用条件聚合将数据转换为所需的格式。如果 Col1 的特定组合在第 2 列中没有对应的值,则会显示“EMPTY”。

结果将如下所示:

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

此查询将为您提供所需的输出,其中第 2 列中的值成为单独的列。

© www.soinside.com 2019 - 2024. All rights reserved.