我有一个 Microsoft SQL Server 表,其中有两列 - 一列用于Locations,另一列用于关联的Images。到目前为止,多个图像可以与同一个位置相关联,并且只有最后一个上传的图像被移动站点实际使用。这是通过为每一行分配一个ImageRank来实现的:
RANK() OVER (PARTITION BY Location ORDER BY Image DESC) ImageRank
这样只有 ImageRank = 1 的行才会被处理移动站点的 SSIS 进程拾取:
现在我们希望能够选择要显示的现有图像(不仅仅是最后一个)。为此,我们引入了第三列 -位类型的MobileSelection。由于此列引入较晚,因此所有现有行都为 Null。
所以我有这样的事情:
+-------+----------+-----------------+-----------+
| image | location | MobileSelection | ImageRank |
+-------+----------+-----------------+-----------+
| 850 | 10 | NULL | 1 |
| 209 | 10 | NULL | 2 |
+-------+----------+-----------------+-----------+
而且我只想将 ImageRank 为 1 的行设置为 1。请记住,ImageRank 不是实际的列,否则这将是微不足道的。
我的目标是能够编写一个更新语句,如果它所在的行的计算 ImageRank 为 1,它将为该列分配值 1。我遇到的问题是能够组合 Rank Over Partition (或类似的)子句与 Update 语句:
UPDATE dining_location SET MobileSelection = 1 WHERE RANK() OVER (PARTITION BY Location ORDER BY Image DESC) = 1;
以上返回此错误:
窗口函数只能出现在 SELECT 或 ORDER BY 子句中。
我将不胜感激。谢谢!