删除重复项并将多行设置为单行

时间:2018-03-05 10:26:04

标签: sql-server sql-server-2016

我的表格中有以下数据

            ID  SOURCE      TARGET          TEL1                  TELE1    TELE2    
            ---------------------------------------------------------------------------------     
            1   TEL         TEL1         5RBTTX4016/8                                                                                                                                                                                                                                                                                                                                                                                                                                                             
            1   TEL         TEL1         5RBTTX4018                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
            1   TEL         TEL1          5RBTTX4016

我希望数据分布在空白的列中。我希望所需的输出如下所示。

            ID  SOURCE      TARGET          TEL1                           TELE1                      TELE2 
            --------------------------------------------------------------------------------------------------     
            1   TEL         TEL1            5RBTTX4016/8                                                                                                                                                                                                                                                                                                                                                                                                                                                              
            1   TEL         TELE1                                            5RBTTX4018                                                                                                                                                                                                                                                                                                                                                                                                                               
            1   TEL         TELE2                                                                       5RBTTX4016

OR

如下所示保持单身也可以:

            ID  SOURCE      TARGET                         TEL1                        TELE1                      TELE2 
            ----------------------------------------------------------------------------------------------------------------    
            1   TEL         TEL1,TELE1,TELE2            5RBTTX4016/8                5RBTTX4016                    5RBTTX4018

IMP-请注意,由于数据将移动到其他列,因此将在“TARGET”列中捕获列名称。 我有大约100个这样的ID。 ID = 1只是一个例子。

我试过了:

            SELECT id,COALESCE(NULLIF(TEL1,''), TELE3)
            FROM table_name 

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

如果数据目标是行号

ID  SOURCE      TARGET               TEL1                  TELE1    TELE2    
        ---------------------------------------------------------------------------------     
        1   TEL         TEL1        5RBTTX4016/8                                                                                                                                                                                                                                                                                                                                                                                                                                                             
        1   TEL         TELE1       5RBTTX4018                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
        1   TEL         TELE2       5RBTTX4016

然后您可以使用以下查询:

SELECT
ID,[SOURCE],STRING_AGG([TARGET], ', ') AS [TARGET],
MAX(CASE WHEN [TARGET] = 'TEL1' THEN [TEL1] ELSE NULL END) AS TEL1,
MAX(CASE WHEN [TARGET] = 'TELE1' THEN [TEL1] ELSE NULL END) AS TELE1,
MAX(CASE WHEN [TARGET] = 'TELE2' THEN [TEL1] ELSE NULL END) AS TELE2
FROM
    Mytable
GROUP BY
    ID,[SOURCE]