【发布时间】:2020-06-03 06:58:22
【问题描述】:
我有一张表叫productLocation,它的数据结构如下,SQLFiddle
+--------------+-------------+-----------+
| FkLocationId | FkProductId | SortValue |
+--------------+-------------+-----------+
| 1 | 100 | 0 |
+--------------+-------------+-----------+
| 1 | 101 | 0 |
+--------------+-------------+-----------+
| 1 | 102 | 0 |
+--------------+-------------+-----------+
| 1 | 103 | 2 |
+--------------+-------------+-----------+
| 1 | 104 | 1 |
+--------------+-------------+-----------+
| 1 | 105 | 3 |
+--------------+-------------+-----------+
| 2 | 100 | 0 |
+--------------+-------------+-----------+
| 2 | 101 | 0 |
+--------------+-------------+-----------+
| 2 | 102 | 0 |
+--------------+-------------+-----------+
| 2 | 103 | 1 |
+--------------+-------------+-----------+
| 2 | 104 | 3 |
+--------------+-------------+-----------+
| 2 | 105 | 2 |
+--------------+-------------+-----------+
| 3 | 100 | 0 |
+--------------+-------------+-----------+
| 3 | 101 | 0 |
+--------------+-------------+-----------+
| 3 | 102 | 0 |
+--------------+-------------+-----------+
| 3 | 103 | 1 |
+--------------+-------------+-----------+
| 3 | 104 | 2 |
+--------------+-------------+-----------+
每个位置都有自己的产品排序顺序。但有些产品有 0 作为SortValue
现在我需要编写一个查询来将SortValue 更新为,
如果我考虑一个位置,FkLocationId = 1
+--------------+-------------+-----------+
| FkLocationId | FkProductId | SortValue |
+--------------+-------------+-----------+
| 1 | 100 | 0 |
+--------------+-------------+-----------+
| 1 | 101 | 0 |
+--------------+-------------+-----------+
| 1 | 102 | 0 |
+--------------+-------------+-----------+
| 1 | 103 | 2 |
+--------------+-------------+-----------+
| 1 | 104 | 1 |
+--------------+-------------+-----------+
| 1 | 105 | 3 |
+--------------+-------------+-----------+
在上面的数据表中,可以看到FkProductId = 100,101,102有0作为SortValue。我需要按FkProductId 降序更新其sortValue。我需要更新它的样子
+--------------+-------------+-----------+
| FkLocationId | FkProductId | SortValue |
+--------------+-------------+-----------+
| 1 | 100 | 3 |
+--------------+-------------+-----------+
| 1 | 101 | 2 |
+--------------+-------------+-----------+
| 1 | 102 | 1 |
+--------------+-------------+-----------+
并且还将之前的SortValue一一更新。
那么完整的输出应该是,
+--------------+-------------+-----------+
| FkLocationId | FkProductId | SortValue |
+--------------+-------------+-----------+
| 1 | 100 | 3 |
+--------------+-------------+-----------+
| 1 | 101 | 2 |
+--------------+-------------+-----------+
| 1 | 102 | 1 |
+--------------+-------------+-----------+
| 1 | 103 | 5 |
+--------------+-------------+-----------+
| 1 | 104 | 4 |
+--------------+-------------+-----------+
| 1 | 105 | 6 |
+--------------+-------------+-----------+
这可能吗?我真的很困惑,请帮我解决这个问题。谢谢
更新:
假设我有另一个表作为产品。其数据结构如下,
+-----------+-----------+
| ProdcutId | SortValue |
+-----------+-----------+
| 100 | 0 |
+-----------+-----------+
| 101 | 0 |
+-----------+-----------+
| 107 | 0 |
+-----------+-----------+
| 108 | 1 |
+-----------+-----------+
| 109 | 2 |
+-----------+-----------+
| 110 | 6 |
+-----------+-----------+
| 111 | 5 |
+-----------+-----------+
| 112 | 4 |
+-----------+-----------+
| 113 | 3 |
+-----------+-----------+
我也需要为这张桌子做同样的事情,我该怎么做
预期输出:
+-----------+-----------+
| ProdcutId | SortValue |
+-----------+-----------+
| 100 | 3 |
+-----------+-----------+
| 101 | 2 |
+-----------+-----------+
| 107 | 1 |
+-----------+-----------+
| 108 | 4 |
+-----------+-----------+
| 109 | 5 |
+-----------+-----------+
| 110 | 9 |
+-----------+-----------+
| 111 | 8 |
+-----------+-----------+
| 112 | 7 |
+-----------+-----------+
| 113 | 6 |
+-----------+-----------+
【问题讨论】:
-
Sql fiddle 有一个漂亮的小按钮,叫做“Text to DDL”。请使用它和edit 你的问题与proper 示例数据。
-
请向我们展示您的尝试,以便我们提供帮助。
-
@ZoharPeled 我用 SQL fiddle 先生sqlfiddle.com/#!18/b1997/1更新了问题@
标签: sql sql-server sql-update sql-order-by