AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 15506
Accepted
Greg B
Greg B
Asked: 2012-03-25 04:19:47 +0800 CST2012-03-25 04:19:47 +0800 CST 2012-03-25 04:19:47 +0800 CST

如何根据表中的另一列创建不同的顺序值集?

  • 772

我有一张桌子,里面有两种类型的笔记。收款单和交货单。它们是相同的数据结构,因此使用相同的表。

CREATE TABLE Notes (
   Id int IDENTITY(1,1) NOT NULL,
   Type int  NOT NULL,
   CustomerId int NOT NULL,
   -- etc
)

我正在将数据从遗留系统迁移到此表中,并且要求收货和交货单有自己的序列号。

我之前已经实现了两个序列表

CREATE TABLE CollectionNoteSequence (
    Id int IDENTITY(1,1) NOT NULL,
    NoteId int NOT NULL
)

其中,该Id列是集合备注的唯一顺序 ID,然后是 NoteId 外键的 to Notes.Id。

现在是时候进行最终(实际)数据迁移了,而且这种设置似乎很难使用。

有没有一种方法可以将两个序列表分箱并向NoteNoNotes 表添加一个字段,以便NoteNo根据Note.Type? 这是复合键还是什么?

新表可能看起来像

CREATE TABLE Notes (
   Id int IDENTITY(1,1) NOT NULL,
   NoteNo int NOT NULL,
   Type int  NOT NULL,
   CustomerId int NOT NULL,
   -- etc
)

数据看起来像:

Id    NoteNo    Type    CustomerId
1     4000      1       123
2     4001      1       456
3     15123     2       789
4     4002      1       753
5     15124     2       741

我正在使用 MS SQL Server 2008。

sql-server-2008 t-sql
  • 2 2 个回答
  • 3276 Views

2 个回答

  • Voted
  1. ConcernedOfTunbridgeWells
    2012-03-25T06:39:24+08:002012-03-25T06:39:24+08:00

    您可以partition by在注释类型上使用,它允许按组重置计算。例如:

    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
    

    将产生以下结果,这将为您提供音符类型中的序列。

    ╔════════════╦═════════════╦═══════════╗
    ║ 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
  2. Best Answer
    gbn
    2012-03-26T23:53:59+08:002012-03-26T23:53:59+08:00

    很简单的回答...

    为什么不是 2 个单独的表?和UNION 是根据需要还是在视图需要的时候结合起来?在我看来,“收款单”和“送货单”是独立的实体。在某些时候,每个人的定义都会有所不同。无论如何,它们现在是否真的相同:我预计会有一些差异?

    此外,SQL Server 2012本身也支持SEQUENCE

    • 4

相关问题

  • 连接不同地理区域的数据库的最佳实践

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve