我们目前有一个系统设置,为每种类型的工作提供一个3个字母的“代码”。我能够与管理层进行一些关于将它们移动到int值的问题,因此我可以自动填充并使用uniqueidentifier运行。所以他们现在就加入了。
当前表:
tblWorkID
WorkID: [3 digit keys]
我希望/需要的是Update
将所有WorkID密钥转换为int
值,升序。这就是我到目前为止所做的:
SELECT distinct WorkID
from tblWorkID
order by WorkID
任何想法如何将逻辑放在那里根据该数据创建一个运行数字,或者我是否试图用SQL做太多?这是482个参赛作品,我宁愿不用手工做(但如果需要的话)。
像这样:(显示数据)
AAA Apple Picking
AAB Construction
AAC General Cleaning
让它填充到这样的东西:
1 Apple Picking
2 Construction
3 General Cleaning
(忽略数字和字母序列旁边的文字,我把它放在那里进行解释。)
更新:我目前拥有的是WorkID:[3个字母的序列]只是添加到WorkID表中的另一个字段(WorkHrs,WorkContact,WorkContract等)所以有多个WorkID,比如AAA和AAC table - 数据完整性非常好,多云。
Update2:我当前的表结构是这样的(我将很快添加另一个ID uniqueidentifier字段):
tblWorkID
WorkId
WorkHrs
WorkContact
WorkContractID
WorkMgrID
WorkDetails
答案 0 :(得分:2)
编辑: 根据你的评论(以及一些假设......)我认为你可以使用DENSE_RANK而不是row_number:
SELECT DENSE_RANK () OVER (ORDER BY <your 3 letter code>,
这样,相同三个字母代码的所有实例都会得到相同的数字。
如果我了解您,您可以使用ROW_NUMBER()函数生成您的运行号码:
SELECT ROW_NUMBER() OVER (ORDER BY <your 3 letter code>,
...
或者,根据您当前的表格结构,您可以只添加identity列。
ALTER TABLE <Your Table>
ADD <NEW COLUMN NAME> Identity(1, 1)
答案 1 :(得分:1)
为每个WorkID创建一个ID
create table T (id int identity(1,1), WorkID char(3))
insert T select distinct WorkID from thetable order by WorkID asc
更新现有的
update thetable set WorkID = (select id from T where T.WorkID = thetable.WorkID)
将列类型更改为INT。