sql在两列中基于某个值添加具有唯一标识的列

时间:2018-10-16 11:13:12

标签: sql

我无法为数据库表创建“ id”列。 id列为value1和value2中具有相同值(包括反向)的行添加唯一ID。

我想实现以下目标:

value1, value2, id
  1      2      1
  1      2      1
  2      1      1
  3      4      2   
  4      3      2
  5      6      3
  6      7      4

我试图通过以下查询在我的select语句中创建id列:(它仅合并具有相等的value1和value2的行):

SUM(CASE
    WHEN value1= value1 and value2= value1 THEN 1
    ELSE NULL END) OVER (PARTITION BY value1,value2) AS id

1 个答案:

答案 0 :(得分:0)

您可以使用;

select t.*,
       dense_rank() over (order by (case when value1 < value2 then value1 else value2 end),
                                   (case when value1 < value2 then value2 else value1 end)
                         ) as group_id                                   
from t;

我应该注意,大多数数据库都支持greatest()least(),因此可以这样写:

select t.*,
       dense_rank() over (order by least(value1, value2), greatest(value1, value2)
                         ) as group_id                                   
from t;