更新SQL中的订单字段
我们需要将订单添加到EventVenture表中,我们通过添加一个int字段来存储EventVenture在订单中的位置。排序基于父事件的ID和事件的VenueGrouping 如果VenueGrouping为false,则事件场馆将按顺序排序。但是,如果为true,则同一事件的EventVinces和从同一父事件派生的EventVinces将具有相同的顺序。例如[假设我们已按事件筛选]:更新SQL中的订单字段,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我们需要将订单添加到EventVenture表中,我们通过添加一个int字段来存储EventVenture在订单中的位置。排序基于父事件的ID和事件的VenueGrouping 如果VenueGrouping为false,则事件场馆将按顺序排序。但是,如果为true,则同一事件的EventVinces和从同一父事件派生的EventVinces将具有相同的顺序。例如[假设我们已按事件筛选]: EVID | VenueID | Not Grouped | Grouped 1 | 1
EVID | VenueID | Not Grouped | Grouped
1 | 1 | 1 | 1
2 | 2 | 2 | 2
3 | 2 | 3 | 2
4 | 3 | 4 | 3
问题是分组何时更改。我需要一些SQL来适当地更新活动的地点顺序,但我发现要想让我的头脑清醒过来是很困难的,尤其是当我从一个未分组到另一个分组而不留下空隙时
我假设它需要在下面这样的if语句中,但如果更有效/更干燥的解决方案是合适的,那就更好了:
-- Changing from Ungrouped to Grouped
IF @OldGrouping=0 AND @NewGrouping=1
BEGIN
UPDATE EventVenues SET Ordering=...
END
-- Changing from Grouped to Ungrouped
ELSE IF @OldGrouping=1 AND @NewGrouping=0
BEGIN
UPDATE EventVenues SET Ordering=...
END
谢谢你的帮助
根据要求,更多示例数据:
对格式设置感到恼火,因此使用了标题键:
A=EventVenueID,B=VenueID,C=原始订单,D=更新订单
从未分组更新为分组
从分组更新为非分组
更新:
如果我理解正确,Ordering
是一列,根据某些外部参数(未存储在数据库中)进行更新
要从未分组更新为分组,请执行以下操作:
WITH rows AS
(
SELECT e.*,
DENSE_RANK() OVER (ORDER BY VenueID DESC) AS dr
FROM EventVenues e
)
UPDATE rows
SET Ordering = dr
这将以降序方式更新序列
,将相同的序列分配给相同的序列
要从已分组更新为未分组,请执行以下操作:
WITH rows AS
(
SELECT e.*,
ROW_NUMBER() OVER (ORDER BY evid DESC) AS rn
FROM EventVenues e
)
UPDATE rows
SET Ordering = rn
这将以降序EVID
顺序更新顺序
更新:
如果我理解正确,Ordering
是一列,根据某些外部参数(未存储在数据库中)进行更新
要从未分组更新为分组,请执行以下操作:
WITH rows AS
(
SELECT e.*,
DENSE_RANK() OVER (ORDER BY VenueID DESC) AS dr
FROM EventVenues e
)
UPDATE rows
SET Ordering = dr
这将以降序方式更新序列
,将相同的序列分配给相同的序列
要从已分组更新为未分组,请执行以下操作:
WITH rows AS
(
SELECT e.*,
ROW_NUMBER() OVER (ORDER BY evid DESC) AS rn
FROM EventVenues e
)
UPDATE rows
SET Ordering = rn
这将以降序EVID
顺序更新顺序。这是否取决于按时间顺序排列的行?那么,如果第四个EventVince被命令为1,那么在更新后它将不得不恢复为4?如果这是唯一的解决方案,它将是可以接受的,但不是理想的。您可以发布一些示例数据:原始数据、更新后的数据以及在这两种情况下您希望看到的排序吗?谢谢回复;我在原始帖子的底部添加了更多的例子。如果您还需要了解其他信息,请再次询问。是的,订购是EventVinces表中的一列。它保存每个活动的活动场地的当前顺序。我做了一个小测试,发现orderbys需要调整:*要从分组更新为非分组,需要:orderbyordering*要从未分组更新为分组,需要:按顺序排序,VenueID。我的缺点是解释得不够好。事实上,这不太正确;按顺序排序,VenueID显然不起作用-因为它不会对排序进行任何分组!这可能需要一个子查询来首先获取数据,然后再获取用户排名。我将进一步调查。这是否取决于按时间顺序排列的行?那么,如果第四个EventVince被命令为1,那么在更新后它将不得不恢复为4?如果这是唯一的解决方案,它将是可以接受的,但不是理想的。您可以发布一些示例数据:原始数据、更新后的数据以及在这两种情况下您希望看到的排序吗?谢谢回复;我在原始帖子的底部添加了更多的例子。如果您还需要了解其他信息,请再次询问。是的,订购是EventVinces表中的一列。它保存每个活动的活动场地的当前顺序。我做了一个小测试,发现orderbys需要调整:*要从分组更新为非分组,需要:orderbyordering*要从未分组更新为分组,需要:按顺序排序,VenueID。我的缺点是解释得不够好。事实上,这不太正确;按顺序排序,VenueID显然不起作用-因为它不会对排序进行任何分组!这可能需要一个子查询来首先获取数据,然后再获取用户排名。我会进一步调查的。
WITH rows AS
(
SELECT e.*,
ROW_NUMBER() OVER (ORDER BY evid DESC) AS rn
FROM EventVenues e
)
UPDATE rows
SET Ordering = rn