2014-02-11 57 views
0

我需要按照dateshipped的順序設置項目,但是在CTE中間。 我使用窗口函數來設置項目的順序(因爲我不能使用順序)。MSSQL窗口函數

select ROW_NUMBER() over(partition by [sku] order by [dateshipped] desc) as [rows] 
,[sku] 
,[dateshipped] 
,[priceperunit] 
from [Order Details] 

我遇到的問題是當dateshipped是空的行編號而不是分配給該項目。

dateshipped爲空時,我將如何獲得指定的行號?

+3

這是不正確的。當'dateshipped'爲'null'時,它們將首先在分區中排序。 (對不起,因爲你有'desc'方向)。 [SQL小提琴](http://sqlfiddle.com/#!3/d41d8/29748) –

回答

2

如果dateshippedNULL他們無論如何都會被訂購,就好像它是最早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] 
+0

你是正確的我犯了一個錯誤,原始信息不在該表中......一旦我把它放在問題是fixexd 。 謝謝! – Ishey4