【问题标题】:SQL Server table identity specification and composite keySQL Server 表标识规范和复合键
【发布时间】:2016-10-31 15:18:10
【问题描述】:

您好,我有两张基本表,一张是公司,下一张是这两张表之间的项目关系是 1 到 M(1 家公司有许多与之关联的项目,而一个项目只属于一家公司)

Company = {companyid,companyname}
           _________
items = {itemid,itemname,companyid}
        _______          ---------

我已将 itemid 标识规范设置为 YES,现在项目 ID 增加了 如果我有两家公司 id 1 & 2 示例数据表将显示此

itemid   itemname    idcompany
-----    -------     ---------
1         car            1
2         bus            2
3         bike           1
4         motorcycle     2

我的问题是在显示公司特定数据时我得到了这个

company 1
itemid   itemname    idcompany
-----    -------     ---------
1         car            1
3         bike           1

company 2
itemid   itemname    idcompany
-----    -------     ---------
2         bus            2
4         motorcycle     2

如何保持每家公司的项目 ID 顺序?
谢谢你

【问题讨论】:

  • 您不应该尝试“保持 id 顺序” - 这不是 PK 目的。添加 row_number() 到 select 语句,甚至在客户端生成这个 rn。
  • 如果我添加另一列并检查 max(itemid2) 并增加是否可以,因为如果我不能保持 PK 顺序最好显示另一个唯一的 ID 不是吗?
  • 当然,肯定可以有sort_no/priority之类的专栏。
  • 您可以添加一个计算列以根据公司 ID 和一般项目 ID 保留每个公司的项目 ID,或者在您的选择语句中使用 row_number() over(partition by idcompany order by itemid)

标签: sql-server database auto-increment composite-primary-key


【解决方案1】:

问题

“顺序”是什么意思?

建议

序列可能会根据业务问题而改变。例如,sequence 总是表示将行插入表中的顺序,还是表示添加项的时间?无论如何,您可能希望实现独立于数据存储方式的序列概念。例如,根据您的需要,您可以做这样的事情(它为您提供公司每个项目的顺序,仅基于 item_id 本身):

select *,
    itemsequence = row_number() over (
        partition by (idcompany)
        order by (itemid))
from items;

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2023-03-28
    • 2013-11-21
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多