代码之家  ›  专栏  ›  技术社区  ›  Rich

更新SQL中的订单字段

  •  1
  • Rich  · 技术社区  · 16 年前

    如果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  | B | C | D
    101 | 1 | 4 | 3
    102 | 2 | 2 | 2
    103 | 2 | 3 | 2
    104 | 3 | 1 | 1
    

    从分组更新为非分组

     A  | B | C | D
    101 | 1 | 3 | 4
    102 | 2 | 2 | 2
    103 | 2 | 2 | 3
    104 | 3 | 1 | 1
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Quassnoi    16 年前
    WITH    rows AS
            (
            SELECT  e.*,
                    ROW_NUMBER() OVER (ORDER BY evid) AS rn,
                    DENSE_RANK() OVER (ORDER BY venueid) AS dr
            FROM    EventVenues e
            )
    UPDATE  rows
    SET     Ungrouped = rn,
            Grouped = dr
    

    更新:

    如果我理解正确的话, Ordering

    要从未分组更新为分组,请执行以下操作:

    WITH    rows AS
            (
            SELECT  e.*,
                    DENSE_RANK() OVER (ORDER BY VenueID DESC) AS dr
            FROM    EventVenues e
            )
    UPDATE  rows
    SET     Ordering = dr
    

    这将更新 下降 VenueID 订单,将相同的订单分配给相同的

    WITH    rows AS
            (
            SELECT  e.*,
                    ROW_NUMBER() OVER (ORDER BY evid DESC) AS rn
            FROM    EventVenues e
            )
    UPDATE  rows
    SET     Ordering = rn
    

    这将更新 订购 下降 EVID 秩序。