SQL将增量ID分配给子组

时间:2018-04-10 23:53:02

标签: sql

正如标题所说,我试图在表中添加一个额外的列,每当另一列中的另一个字符串发生变化时,该表会自动增加。 我想在查询中这样做。

示例:

gem 'turbolinks'

GroupID列是我想要完成的。

我们可以确定MyCol的字符串在每个子组中都是相同的(Foo将永远是Foo等)。

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以使用MyCol的不同值创建一个临时表,并通过临时表的RowNumber获取groupId,并将rownumbered结果与您的表连接。

这是oracle中的一个原始示例:

WITH data AS
  (SELECT 'Cable' MyCol FROM dual
  UNION ALL
  SELECT 'Cable' FROM dual
  UNION ALL
  SELECT 'Foo' FROM dual
  UNION ALL
  SELECT 'Foo' FROM dual
  UNION ALL
  SELECT 'Foo' FROM dual
  UNION ALL
  SELECT 'Fuzz' FROM dual
  UNION ALL
  SELECT 'Fizz' FROM dual
  UNION ALL
  SELECT 'Tv' FROM dual
  UNION ALL
  SELECT 'Tv' FROM dual
  ),
  tablename AS
  (SELECT * FROM data
  ),
  temp AS
  ( SELECT DISTINCT mycol FROM tablename
  ),
  temp2 AS
  ( SELECT mycol, rownum AS groupid from temp
  )
SELECT tablename.mycol, temp2.groupid FROM temp2 JOIN tablename ON temp2.mycol = tablename.mycol

您还可以检查一种实现tabibitosan方法的方法,因为您知道列条件是字符串。

答案 1 :(得分:0)

如果我理解正确,您可以使用dense_rank()

select t.*, dense_rank() over (order by col1) as groupid
from t;