2017-02-15 9 views
0

Я хотел бы, чтобы пропустить номер строки, когда предыдущий номер строки является значение 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 [email protected] 
order by O.Id 

Мой выход

enter image description here

Мой желаемый результат

enter image description here

Может ли один помочь мне, пожалуйста

ответ

3

Вы должны использовать ROW_NUMBER() с PARTITION BY CASE WHEN Custom = 2 THEN 1 ELSE 0 END сделать отдельный (скрытый) счетчик строк, где Custom = 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 [email protected] 
ORDER BY O.Id 
+0

Благодаря его работает отлично – Hussain