Sql server 2008 r2 从SQL表的多列生成唯一的整数ID
我需要在sql数据库的表中生成一个新列 下表为:Sql server 2008 r2 从SQL表的多列生成唯一的整数ID,sql-server-2008-r2,group-by,uniqueidentifier,netezza,Sql Server 2008 R2,Group By,Uniqueidentifier,Netezza,我需要在sql数据库的表中生成一个新列 下表为: id1 value1 value2 value3 value4 9465 387 801 1990 20 所有列都是整数。值1和值2始终为3位数字,值3为年份值,值4不超过3位数字 我需要通过组合value1到value4来生成一个值,假设它被称为“value\u combine”。“价值组合”应该是唯一的。例如,给定值1到值4的不同组合,“值\u combine”也应该不同
id1 value1 value2 value3 value4
9465 387 801 1990 20
所有列都是整数。值1和值2始终为3位数字,值3为年份值,值4不超过3位数字
我需要通过组合value1到value4来生成一个值,假设它被称为“value\u combine”。“价值组合”应该是唯一的。例如,给定值1到值4的不同组合,“值\u combine”也应该不同
然后,将“值\u combine”与id1组合,这样新值(我们称之为final\u id)应该是唯一的
例如,给定id1和value_combine的不同组合,final_id也应该不同
最终_id可用于识别id1和value1-4的每个唯一组合
最终\u id必须是整数,并且所有值应具有相同的数字长度,例如6、7或8位
任何帮助都将不胜感激。也许我遗漏了什么,但听起来像是一个
稠密的等级()
SELECT id1,value1,value2,value3,value4
,DENSE_RANK() OVER(ORDER BY id1,value1,value2,value3,value4)+100000 AS final_ID
FROM YourTable
有一种叫做鸽子洞原理的东西说,这是不可靠的:。你能不能添加一个示例来说明你想要的输出?我同意戈登的观点。bigint
可能足够大以适应这种方案(取决于id1
的范围),但int
则不然。不过我很好奇:你为什么要这么做?这似乎是一组奇怪的要求。如果value1-4相同,但id1不同,那么如果我们使用ROW\u NUMBER(),则值\u combine将相同。谢谢@GoatCO。实际上,我认为你的意思是densite\u rank()
,而分区中的列都应该按顺序排列。我仍然不确定这是否真的能回答老年退休金计划的问题,但它至少能为每个组合提供一个唯一的数字。@GordonLinoff确实,谢谢,brain已经离开了大楼。不管怎么说,我似乎已经错过了OP的目标。