在SQL

时间:2019-06-11 04:53:00

标签: sql-server tsql

我在SQL数据库中有两个表ImagesCategoryImages图像包含imageorder列,该列现在包含随机顺序,所以我想做的是重新排列从1开始的顺序,依此类推,但是应该是类别明智的。

例如,类别表包含TwowheelerFourwheeler类别,而Images表包含Twowheeler的4行中的10行和Fourwheeler的6行

因此,imageorder列应更新为Twowheeler的1,2,3,4,而Fourwheeler则更新为1,2,3,4,5,6。

1 个答案:

答案 0 :(得分:1)

应该是这样的:

WITH DataSource AS
(
    SELECT *
          ,ROW_NUMBER() OVER(PARTITION BY categoryid ORDER BY imageOrder) rowID
    FROM Images 
)
UPDATE IMages
SET ImageOrder = DS.rowID
FROM Images I
INNER JOIN DataSoruce DS
    ON I.ImageId = DS.ImageID;

想法是使用ROW_NUMBER来订购图像。我们使用PARTITION BY是因为我们想为每个category重置顺序。另外,我们需要使用Common Table Expressionstore并在INNER JOIN语句中使用它-不允许直接在{{ 1}}语句。