当前一个行号为 NULL 时跳过行号

Skip Row Number when previous Row Number is NULL

我想在前一个行号为 NULL 时跳过行号 我的查询如下

select O.Id as orderItemID,Custom,
    CustomName=(CASE WHEN Custom=1 THEN 'Left' When Custom=2 Then 'Right' Else '' END),
    RowNumber = (CASE WHEN Custom = '2' THEN NULL ELSE Row_Number() OVER(ORDER BY O.ID) END )
    From  dbo.OrderItem O 
    left join SubCategory I On O.ItemId=I.ItemId 
    left join ItemType IT On O.Size=IT.TypeId
    where O.OrderId=@OrderId
order by O.Id 

我的输出是

我想要的输出

谁能帮帮我

您需要使用 ROW_NUMBER()PARTITION BY CASE WHEN Custom = 2 THEN 1 ELSE 0 ENDCustom = 2:

的行创建一个单独的(隐藏的)计数器
SELECT   O.Id as orderItemID
        ,Custom
        ,CustomName =(CASE WHEN Custom=1 THEN 'Left' When Custom=2 Then 'Right' Else '' END)
        ,RowNumber = CASE WHEN Custom = 2 THEN NULL ELSE ROW_NUMBER() OVER (PARTITION BY CASE WHEN Custom = 2 THEN 1 ELSE 0 END ORDER BY O.ID) END
FROM  dbo.OrderItem O 
    LEFT JOIN SubCategory I On O.ItemId=I.ItemId 
    LEFT JOIN ItemType IT On O.Size=IT.TypeId
WHERE O.OrderId=@OrderId
ORDER BY O.Id