首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于表中的另一列创建不同的顺序值集?

如何基于表中的另一列创建不同的顺序值集?
EN

Database Administration用户
提问于 2012-03-24 12:19:47
回答 2查看 3.4K关注 0票数 3

我有一张桌子上有两种类型的笔记。收件及交收通知书。它们是相同的数据结构,因此使用相同的表。

代码语言:javascript
复制
CREATE TABLE Notes (
   Id int IDENTITY(1,1) NOT NULL,
   Type int  NOT NULL,
   CustomerId int NOT NULL,
   -- etc
)

我正在将数据从遗留系统迁移到这个表中,并且有一项要求,即收集和交付说明必须有自己的序列号。

我以前将两个序列表实现为

代码语言:javascript
复制
CREATE TABLE CollectionNoteSequence (
    Id int IDENTITY(1,1) NOT NULL,
    NoteId int NOT NULL
)

其中Id列是集合注释的唯一顺序Id,然后是NoteId外键到Notes.Id

完成最终(实际)数据迁移的时间越来越长,这个设置似乎很难使用。

是否有一种方法可以将两个序列表放入并向Notes表中添加一个NoteNo字段,以便根据Note.Type的不同,NoteNo将是顺序的?这是组合键还是什么的?

新的表可能看起来像

代码语言:javascript
复制
CREATE TABLE Notes (
   Id int IDENTITY(1,1) NOT NULL,
   NoteNo int NOT NULL,
   Type int  NOT NULL,
   CustomerId int NOT NULL,
   -- etc
)

这些数据看起来是:

代码语言:javascript
复制
Id    NoteNo    Type    CustomerId
1     4000      1       123
2     4001      1       456
3     15123     2       789
4     4002      1       753
5     15124     2       741

我正在使用2008。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-03-26 07:53:59

很简单的答案..。

为什么不分开两张桌子呢?并视需要而定,或在需要时考虑合并?在我看来,“收款单”和“交货单”是单独的实体。在某一时刻,每一种的定义都会有所不同。不管怎么说,它们现在真的是一样的吗?我希望有一些不同?

另外,Server 2012也本机支持序列

票数 4
EN

Database Administration用户

发布于 2012-03-24 14:39:24

您可以在便笺类型上使用partition by,这允许组重置计算。例如:

代码语言:javascript
复制
create table OldNotes (
       OldNoteRef           varchar (20) not null
      ,OldNoteType          varchar (20)
      -- Other data goes here
)
go

insert OldNotes (OldNoteRef, OldNoteType) values ('CABC123', 'C')
insert OldNotes (OldNoteRef, OldNoteType) values ('CABC456', 'C')
insert OldNotes (OldNoteRef, OldNoteType) values ('CABC789', 'C')
insert OldNotes (OldNoteRef, OldNoteType) values ('DXYZ001', 'D')
insert OldNotes (OldNoteRef, OldNoteType) values ('DXYZ034', 'D')
insert OldNotes (OldNoteRef, OldNoteType) values ('XZYZ100', 'D')
go


select OldNoteRef
      ,OldNoteType
      ,row_number() over (
          partition by OldNoteType
          order by OldNoteRef
      ) as NewNoteID
  from OldNotes
go

将产生以下结果,这将在便笺类型中给出一个序列。

代码语言:javascript
复制
╔════════════╦═════════════╦═══════════╗
║ OldNoteRef ║ OldNoteType ║ NewNoteID ║
╠════════════╬═════════════╬═══════════╣
║ CABC123    ║ C           ║         1 ║
║ CABC456    ║ C           ║         2 ║
║ CABC789    ║ C           ║         3 ║
║ DXYZ001    ║ D           ║         1 ║
║ DXYZ034    ║ D           ║         2 ║
║ XZYZ100    ║ D           ║         3 ║
╚════════════╩═════════════╩═══════════╝

顺便说一句,http://www.sensefulsolutions.com/2010/10/format-text-as-table.html生产的表

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/15506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档