Sql 甲骨文将两行合并为一行
我计划把两(多)行合并成一行。我的数据是这样的Sql 甲骨文将两行合并为一行,sql,oracle,group-by,dense-rank,Sql,Oracle,Group By,Dense Rank,我计划把两(多)行合并成一行。我的数据是这样的 ╔══════════╦════════╦═══════════╦═══════════╦════════════╗ ║ ReportID ║ Item ║ StartDt ║ EndDt ║ Statement ║ ╠══════════╬════════╬═══════════╬═══════════╬════════════╣ ║ 1 ║ 3000 ║ 11-Mar-16 ║ (null) ║ Rem
╔══════════╦════════╦═══════════╦═══════════╦════════════╗
║ ReportID ║ Item ║ StartDt ║ EndDt ║ Statement ║
╠══════════╬════════╬═══════════╬═══════════╬════════════╣
║ 1 ║ 3000 ║ 11-Mar-16 ║ (null) ║ Remark ║
╠══════════╬════════╬═══════════╬═══════════╬════════════╣
║ 1 ║ 3001 ║ 11-Mar-16 ║ 13-Mar-16 ║ (null) ║
╠══════════╬════════╬═══════════╬═══════════╬════════════╣
║ 2 ║ 4002 ║ 24-May-16 ║ 27-May-16 ║ Remark1 ║
╠══════════╬════════╬═══════════╬═══════════╬════════════╣
║ 2 ║ 4003 ║ 24-May-16 ║ 28-May-16 ║ Remark1 ║
╚══════════╩════════╩═══════════╩═══════════╩════════════╝
我希望通过ReportID
合并并使用不同的规则:
- 使用最高的
endDt
- 使用非空的
语句
- 使用具有最高
项的记录的
语句
╔══════════╦═══════════╦═══════════╦════════════╗
║ ReportID ║ StartDt ║ EndDt ║ Statement ║
╠══════════╬═══════════╬═══════════╬════════════╣
║ 1 ║ 11-Mar-16 ║ 13-Mar-16 ║ Remark ║
╠══════════╬═══════════╬═══════════╬════════════╣
║ 2 ║ 24-May-16 ║ 28-May-16 ║ Remark1 ║
╚══════════╩═══════════╩═══════════╩════════════╝
我需要用普通SQL实现这一点,但不能编写PL-SQL例程
数据
您希望每个
reportid
有一行,因此可以按它分组。然后使用适当的聚合函数(即语句列的KEEP FIRST/LAST
)获得所需的值:
select
reportid,
max(startdt) as startdt,
max(enddt) as enddt,
max(statement) keep (dense_rank last
order by case when statement is null then 1 else 2 end, item
) as statement
from mytable
group by reportid
order by reportid;
您希望每个
reportid
有一行,因此可以按它分组。然后使用适当的聚合函数(即语句列的KEEP FIRST/LAST
)获得所需的值:
select
reportid,
max(startdt) as startdt,
max(enddt) as enddt,
max(statement) keep (dense_rank last
order by case when statement is null then 1 else 2 end, item
) as statement
from mytable
group by reportid
order by reportid;
带有
keep
和last
的提示非常有价值!太多了!带有keep
和last
的提示非常有价值!太多了!