首页 > 解决方案 > 在oracle中合并和删除带有空格的行

问题描述

我的数据如下:

IDS_DEV Teradata IDS_DEV Data_Waive LEG_TX     Account Transaction No  XDR
IDS_DEV Teradata IDS_DEV Data_Waive LEG_TX     Data Transaction    No  XDR
IDS_DEV Teradata IDS_DEV Data_Waive LEG_TX                                
IDS_DEV Teradata IDS_DEV Data_Waive LEG_TX     Job Transaction     No  XDR
IDS_DEV Teradata IDS_DEV Data_Waive TRANS_AM   Account Transaction     DEG
IDS_DEV Teradata IDS_DEV Data_Waive TRANS_AM                       Yes    
IDS_DEV Teradata IDS_DEV Data_Waive TRA_EFF_DT Account Transaction     PDR
IDS_DEV Teradata IDS_DEV Data_Waive TRA_EFF_DT                     No  PDR

在此处输入图像描述

这里 HDFT 列可以有多个值,N_Identity 可以有 Yes 或 No,Class 将有一个特定的值。

现在,对于同一列组 LEG_TX,其中有多个 HDFT 值,我只想要除空白行之外的所有行。另外,我想将 Trans_AM 和 TRA_EFF_DT 的行合并为一行。

下面是我想要的结果: 在此处输入图像描述

DB  DBMS    Schema  Table   Column  HDFT    N_Identity  Class
IDS_DEV Teradata    IDS_DEV Data_Waive  LEG_TX  Account Transaction No  XDR
IDS_DEV Teradata    IDS_DEV Data_Waive  LEG_TX  Data Transaction    No  XDR
IDS_DEV Teradata    IDS_DEV Data_Waive  LEG_TX  Job Transaction No  XDR
IDS_DEV Teradata    IDS_DEV Data_Waive  TRANS_AM    Account Transaction Yes DEG
IDS_DEV Teradata    IDS_DEV Data_Waive  TRA_EFF_DT  Account Transaction No  PDR

我可以使用 Max(case..) 实现第二种情况,但这样做没有满足第一个要求。

由于格式混乱,不添加文本数据。

谢谢。

[更新]添加另一个示例:

在此处输入图像描述

输出: 在此处输入图像描述

对于特定列,N_Identity可以是Yes 或 No。

标签: sqloracle

解决方案


只要我正确理解您的数据集,这应该有效:

SELECT * FROM
(
   SELECT * FROM
   (
        SELECT COL, MAX(HDFT) as HDFT, MAX(N_Identity) as N_Identity, MAX(CLS) as CLS  
        FROM table_1
        GROUP BY COL
   )a 

  UNION

  SELECT COL, HDFT, N_IDENTITY, CLS FROM table_1

)b

WHERE HDFT IS NOT NULL
AND N_IDENTITY IS NOT NULL
AND CLS IS NOT NULL

要添加更多列,您只需将它们添加到两个 SELECT 语句和末尾的 WHERE 子句(3 个位置)。例如,

SELECT * FROM
(
   SELECT * FROM
   (
        SELECT COL, MAX(HDFT) as HDFT, MAX(N_Identity) as N_Identity, MAX(CLS) as CLS, MAX(COL_5) as COL_5, MAX(COL_6) as COL_6
        FROM table_1
        GROUP BY COL
   )a 

  UNION

  SELECT COL, HDFT, N_IDENTITY, CLS, COL_5, COL_6 FROM table_1

)b

WHERE HDFT IS NOT NULL
AND N_IDENTITY IS NOT NULL
AND CLS IS NOT NULL
AND COL_5 IS NOT NULL
AND COL_6 IS NOT NULL

只要 N_IDENTITY、CLASS 和后续列每列只有 1 个值,这将起作用。如果存在如下数据:

COLUMN  HDFT                 N_IDENTITY  CLASS
------  -------------------  ----------  -----
LEG_TX  Account Transaction  No          XDR
LEG_TX  Data Transaction     Yes         XDR
LEG_TX  Job Transaction      No          XDR

,如果同一个 COLUMN 值有多个 N_IDENTITY 值,那么上面的查询将不会产生你想要的结果。


推荐阅读