对于多个列的重复值,请创建具有唯一性的新列

时间:2018-07-16 15:22:17

标签: sql sql-server

我有一个类似SQL的数据集

Col1     Col2     Col3     Col4
   A       re        T     huge
   A       re        T    small
   B       re        T     huge
   C       re        T     huge
   C       re        T   medium
   C       re        T    small

对于前3列中的任何重复项,我想在其旁边创建新列,并使用Col4中的每个唯一值。我的最终目标是将其加入另一个数据集,并且我想包括所有信息。

我希望最终数据集看起来像这样:

Col1     Col2     Col3     Col4    Col5    Col6 ....
   A       re        T     huge   small    NULL
   B       re        T     huge    NULL    NULL
   C       re        T     huge  medium   small

2 个答案:

答案 0 :(得分:0)

您可以使用CTE进行此操作,该CTE在分区的前三列生成ROW_NUMBER(),并根据您要使用的任何逻辑进行排序。

然后您从CTE分组的前三列中进行选择,并对每个其他列进行子选择,从而为第一列增加关联的RowNumber = 1,为第二列增加关联的RowNumber = 2,等等。

替代子选择,您可以改用MAX(CASE)表达式。

请注意,如果您不知道会有多少其他列,则必须使用动态sql来完成。

答案 1 :(得分:0)

我认为这就是您想要的

SELECT AA.col1, 
       AA.col2, 
       AA.col3, 
       small.col4  AS col4, 
       huge.col4   AS col5, 
       medium.col4 AS col6 
FROM   (SELECT col1, 
               col2, 
               col3 
        FROM   your_table 
        GROUP  BY col1, 
                  col2, 
                  col3)AA 
       LEFT JOIN (SELECT col1, 
                         col2, 
                         col3, 
                         col4 
                  FROM   your_table 
                  WHERE  col4 = small)small 
              ON ( small.col1 = AA.col1 
                   AND small.col2 = AA.col2 
                   AND small.col3 = AA.col3 ) 
       LEFT JOIN (SELECT col1, 
                         col2, 
                         col3, 
                         col4 
                  FROM   your_table 
                  WHERE  col4 = huge)huge 
              ON ( huge.col1 = AA.col1 
                   AND huge.col2 = AA.col2 
                   AND huge.col3 = AA.col3 ) 
       LEFT JOIN (SELECT col1, 
                         col2, 
                         col3, 
                         col4 
                  FROM   your_table 
                  WHERE  col4 = medium)medium 
              ON ( medium.col1 = AA.col1 
                   AND medium.col2 = AA.col2 
                   AND medium.col3 = AA.col3 )