我在SQL数据库中有两个表Images
和Category
。 Images
图像包含imageorder
列,该列现在包含随机顺序,所以我想做的是重新排列从1开始的顺序,依此类推,但是应该是类别明智的。
例如,类别表包含Twowheeler
和Fourwheeler
类别,而Images
表包含Twowheeler
的4行中的10行和Fourwheeler
的6行
因此,imageorder
列应更新为Twowheeler
的1,2,3,4,而Fourwheeler
则更新为1,2,3,4,5,6。
答案 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 Expression来store
并在INNER JOIN
语句中使用它-不允许直接在{{ 1}}语句。