【问题标题】:How to Add Order to an existing table?如何将订单添加到现有表?
【发布时间】:2013-12-19 09:03:18
【问题描述】:

我有一个名为 Products 的表。假设这是我的桌子,

ID    Name     ParentID
--    ---       --------
1      a        NULL
2      b        NULL
3      a1       1
4      a2       1
5      b2       2
6      b2       2

现在我需要添加关于 ParentID 的 [Order] 列,

ID    Name     ParentID    Order
--    ---       --------   ----
1      a        NULL        NULL
2      b        NULL        NULL
3      a1       1            1
4      a2       1            2   
5      b2       2            1  
6      b2       2            2  

创建 [Order] 很简单,但插入记录有点棘手

【问题讨论】:

  • @RoyDictus,我是新手?
  • 好吧,您在这里已经足够长的时间了解规则了。所以请向我们展示你的作品。
  • 我们真的需要责怪那些从未使用过ROW_NUMBER 的人吗?如果有人不知道这个功能,他会尝试什么?
  • @Smileek 光标浮现在脑海中。我相信每个问题,无论提问者的能力或问题的难度如何,都需要表现出自己解决问题的尝试,即使只是分享一些关于什么行不通的想法。
  • @Dukeling,是的,你可能是对的。

标签: sql sql-server sql-server-2012


【解决方案1】:
UPDATE  [Products]
SET  [Products].[Order] = PTT.[Order]
FROM
    [Products]
    INNER JOIN (SELECT ID, ROW_NUMBER() OVER (PARTITION BY PT.ParentID ORDER BY ID) AS [Order]
                FROM [Products] PT
                WHERE PT.ParentID IS NOT NULL) AS PTT ON PTT.ID = [Products].ID

【讨论】:

  • 谢谢谢谢。只需将您的分析器更新为,UPDATE [Products] SET [Products].[Order] = PTT.[Order] FROM [Products] INNER JOIN (SELECT ID, ROW_NUMBER() OVER (PARTITION BY PT.ParentID ORDER BY Name) AS [ Order] FROM [Products] PT WHERE PT.ParentID IS NOT NULL) AS PTT ON PTT.ID = [Products].ID
  • @user960567 - 这是 SQL 提示的答案。如果他们想删除不必要的连接,我会留给他们。
  • @MartinSmith,好的,谢谢
猜你喜欢
  • 2012-05-06
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
相关资源
最近更新 更多