我需要按照dateshipped
的顺序设置项目,但是在CTE中间。
我正在使用窗口函数来设置项目的顺序(因为我不能使用order by)。
select ROW_NUMBER() over(partition by [sku] order by [dateshipped] desc) as [rows]
,[sku]
,[dateshipped]
,[priceperunit]
from [Order Details]
我遇到的问题是当dateshipped
为空时,行号未分配给该项目。
当dateshipped
为空时,如何分配行号?
答案 0 :(得分:2)
如果dateshipped
为NULL
,则无论如何都会对它们进行排序,就好像它是最早的datetime
一样,就像在普通ORDER BY
中使用可空列一样。但是,您可以先使用CASE
来指定空值是先到还是最后:
SELECT Row_number()
OVER(
partition BY [sku]
ORDER BY CASE WHEN dateshipped IS NULL THEN 0 ELSE 1 END ASC,
dateshipped DESC) AS [rows],
[sku],
[dateshipped],
[priceperunit]
FROM [order details]