选择具有值的一行,并保留具有空值的相同行

时间:2020-03-11 02:57:01

标签: sql oracle null

我有这样的数据:

Date_time OS       Login    Action    Download  Action_detail      Download_detail
09-09-19  Android  User_id  Download  50        Download - Games   20
09-09-19  Android  User_id  Download  50        Download - App     15
09-09-19  Android  User_id  Download  50        Download - Music   30  
09-09-19  Android  User_id  Download  50        Download - Others  20
09-09-19  Android  Guest    Download  20        Download - Games   20
09-09-19  iOS      User_id  Download  10        Download - Others  15
09-09-19  iOS      Guest    Uninstall 15        Download - Games   20
09-09-19  iOS      Guest    Uninstall 15        Download - App     5
10-09-19  iOS      Guest    Uninstall 20        Download - App     15
10-09-19  iOS      Guest    Uninstall 20        Download - App     10

无论如何,我可以通过以下方式返回查询:

Date_time OS       Login    Action    Download  Action_detail      Download_detail
09-09-19  Android  User_id  Download  50        Download - Games   20
09-09-19  Android  User_id  Download  (null)    Download - App     15
09-09-19  Android  User_id  Download  (null)    Download - Music   30  
09-09-19  Android  User_id  Download  (null)    Download - Others  20
09-09-19  Android  Guest    Download  20        Download - Games   20
09-09-19  iOS      User_id  Download  10        Download - Others  15
09-09-19  iOS      Guest    Uninstall 15        Download - Games   20
09-09-19  iOS      Guest    Uninstall (null)    Download - App     5
10-09-19  iOS      Guest    Uninstall 20        Download - App     15
10-09-19  iOS      Guest    Uninstall (null)    Download - App     10

“下载编号”列是“下载操作”的唯一编号, 最后,我要用独特的date_time,OS,Login,Action作为切片器对其进行总结。

1 个答案:

答案 0 :(得分:0)

您可以使用LAG功能获得所需的结果,如下所示-

DEMO HERE

SELECT Date_time,OS,Login,Action,Download,Action_detail,Download_detail, 
CASE 
    WHEN Download = LAG(Download,1) OVER (ORDER BY (SELECT NULL FROM DUAL)) THEN NULL
    ELSE Download
END New_Column
FROM your_table

WINDOW函数的ORDER存在问题,因为您可以看到我使用“ SELECT NULL FROM DUAL”来保持数据的常规ORDER。但这并不能确认以这种方式数据的顺序将始终相同。如果表中有任何列可用于订购,那将是正确的方法。