繁体   English   中英

SQL将多行合并为一

[英]SQL Combining multiple rows into one

我想将多行合并为一,只保留值不为NULL的值

这是我想要实现的目标:

我要这个

+----+-----------------+-----------------+-----------------+--------------------+
| ID | 1stNofification | 2ndNotification | 3rdNotification | NotificationNumber |
+----+-----------------+-----------------+-----------------+--------------------+
| 1  | 01.01.2019      | NULL            | NULL            | 1                  |
+----+-----------------+-----------------+-----------------+--------------------+
| 1  | NULL            | 02.02.2019      | NULL            | 2                  |
+----+-----------------+-----------------+-----------------+--------------------+
| 1  | NULL            | NULL            | 03.03.2019      | 3                  |
+----+-----------------+-----------------+-----------------+--------------------+
| 2  | 06.01.2019      | NULL            | NULL            | 1                  |
+----+-----------------+-----------------+-----------------+--------------------+
| 2  | NULL            | 09.02.2019      | NULL            | 2                  |
+----+-----------------+-----------------+-----------------+--------------------+
| 2  | NULL            | NULL            | 11.03.2019      | 3                  |
+----+-----------------+-----------------+-----------------+--------------------+

对此:

+----+-----------------+-----------------+-----------------+
| ID | 1stNofification | 2ndNotification | 3rdNotification |
+----+-----------------+-----------------+-----------------+
| 1  | 01.01.2019      | 02.02.2019      | 03.03.2019      |
+----+-----------------+-----------------+-----------------+
| 2  | 06.01.2019      | 09.02.2019      | 11.03.2019      |
+----+-----------------+-----------------+-----------------+

我尝试了类似的东西:

SELECT 
ID, 
MAX(CASE WHEN a.NotificationNumber = 1 THEN 1stNotification END)1stNotification,
MAX(CASE WHEN a.NotificationNumber = 2 THEN 2ndNotification END)2ndNotification, 
MAX(CASE WHEN a.NotificationNumber = 3 THEN 3rdNotification END)3rdNotification

FROM Notifications

GROUP BY ID

不幸的是,那并没有给我我预期的结果。

如果有人可以帮助我,我将非常感激:)

您只需要在没有任何情况下使用max

SELECT 
ID, 
MAX(1stNotification) AS 1stNotification,
MAX(2ndNotification) AS 2ndNotification, 
MAX(3rdNotification) AS 3rdNotification

FROM Notifications

GROUP BY  ID

我想你需要这样的东西...

 ; with cte as (
     select 1 as id, 'dd' as not1, null as not2, null as not3 , 1 as notifications
     union all 
     select 1, null, 'df', null  , 2 
     union all 
     select 1, null, null, 'vc', 3  
     union all 
     select 2, 'ws', null, null, 1  
     union all 
     select 2, null, 'xs', null, 2  
     union all 
     select 2, null, null, 'nm', 3  
 )
 , ct as (
    select id, coalesce(not1, not2, not3) as ol, notifications , 
    'notification' + cast(notifications as varchar(5)) as Col 
    from cte
 )
 select * from (
 select id, ol,  col from ct )
 as d 
 pivot (
 max(ol) for col in ( [notification1], [notification2], [notification3] )
 ) as P

根据我的理解,这里的通知列实际上是在行中提及的通知编号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM