【发布时间】:2015-08-10 21:09:39
【问题描述】:
我为我的表创建了一个默认值为 0 的新非空列,它保持显示顺序。我想更新该表的所有行,该 displayorder 的值 row_number() 超过 id 排序。在这里,我可以为一个 id 做到这一点。我怎样才能为所有 id 做到这一点。
我的桌子是:
id | personid | name | displayorder
---+----------+--------+------------
1 | 10 | test1 | 0
2 | 10 | test2 | 0
3 | 10 | test3 | 0
4 | 10 | test4 | 0
5 | 10 | test5 | 0
6 | 11 | test6 | 0
7 | 11 | test7 | 0
8 | 12 | test8 | 0
我想要的结果是:
id | personid | name | displayorder
---+----------+--------+------------
1 | 10 | test1 | 1
2 | 10 | test2 | 2
3 | 10 | test3 | 3
4 | 10 | test4 | 4
5 | 10 | test5 | 5
6 | 11 | test6 | 1
7 | 11 | test7 | 2
8 | 12 | test8 | 1
这是我的 sql 代码,但它只适用于一个给定的 id:
update MyTable
set displayorder = z.ord
FROM (
SELECT row_number() over (order by id) as ord, id
FROM MyTable p2
where p2.personid = 1
) z
where MyTable.id= z.id
and personid = 1
【问题讨论】:
-
你真的有两张桌子 -
productproperty和MyTable还是同一张桌子? -
对不起,我更正了。我只有一张桌子。
-
那你肯定最好不要加入答案,我认为这将是最简单和最快的一个
-
与其坚持使用SQL,不如切换到T-SQL并利用循环能力。 ...或者,根本不使用 displayorder 列并即时创建订单。我无法想象您为维护列上的数据完整性而付出的努力。只是我的 2 美分。
标签: sql-server sql-update row-number