Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新SQL中的订单字段_Sql_Sql Server_Sql Update - Fatal编程技术网

更新SQL中的订单字段

更新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

我们需要将订单添加到EventVenture表中,我们通过添加一个int字段来存储EventVenture在订单中的位置。排序基于父事件的ID和事件的VenueGrouping

如果VenueGrouping为false,则事件场馆将按顺序排序。但是,如果为true,则同一事件的EventVinces和从同一父事件派生的EventVinces将具有相同的顺序。例如[假设我们已按事件筛选]:

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