SQL填充新列依赖于其他列

时间:2016-03-21 02:36:21

标签: mysql sql

我在数据库中有一个表,其中有两列名为item和slot。我想创建另一个用数字填充的列(称为cid),以便:

  1. 具有相同项目和相同插槽的两行始终具有相同的cid
  2. 具有不同商品的行可能具有相同的cid
  3. 不同cid值的数量是最小的
  4. 具有相同项目但不同插槽的行需要具有不同的cid
  5. 如果可能,我想运行一个执行该操作的SQL查询。

    按要求编辑:

    | item | slot | what cid should be
    | a    | x    | 1
    | a    | y    | 2
    | a    | y    | 2
    | a    | z    | 3
    | b    | x    | 1
    | b    | y    | 2
    | b    | q    | 3
    | c    | x    | 1
    

1 个答案:

答案 0 :(得分:0)

您可以通过枚举每个项目的插槽来执行您想要的操作:

   select t.*,
          (@cid := if(@i = item, if(@s = slot, @cid, if(@s := slot, @cid + 1, @cid + 1))
                      if(@i := item and @s := 0, 1, 1)
                     )
          ) as cid
   from t cross join
        (select @i := -1, @cid := 0, @s := 0) param
   order by item;