sql - 在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。
解决方案
只要我正确理解您的数据集,这应该有效:
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 值,那么上面的查询将不会产生你想要的结果。
推荐阅读
- java - Gradle 在其他源集中找不到测试
- python - 使用 Python+Selenium+WebDriver 登录 Web 应用程序后获取空白寻呼机
- python - Pyodbc - 遍历查询结果并获取计数
- amazon-web-services - *.tfvars 文件和在 terraform 中的 main.tf 中传递值之间的区别
- python - 机器人框架:无法在 Firefox 浏览器上加载配置文件
- c# - 使用请求/响应模式处理 ASP.NET Core Web API 异常
- java - 如果一个元素后面跟着相同的元素n次,如何检查二维数组
- javascript - 基于对象迭代动态获取数据库值
- java - 如何将 Map 转换为 javax.json.JsonObject?
- python - Tkinter Notebook 框架中的滚动条