LN_NUMBER RUN_DATE SALE_DATE STATUS_CODE TYPE PROCESSOR_ID
------------------------------------------------------------------------
0201203909 02/21/17 09/30/15 R 1 TG1
0201203909 02/21/17 R 2 TG1
0201203909 02/21/17 A 1 MW1 -------choose this row for LN_number 0201203909
0201105919 02/21/17 08/24/16 S 2 MW1 ---choose this row for LN_number 0201105919
0201105919 02/21/17 08/24/16 S 2 MW1
0201105919 02/21/17 07/01/15 R 2 TG1
1400000138 02/21/17-----------------------------------------------------------Choose this for LN_NUMBER 1400000138
我有一個名爲closure的表,如上所示。我需要從閉合表中選擇記錄。多種方式訂購排名函數SQL Server 2014
的條件是這樣的:
- 如果有一個狀態碼= A,然後選擇該行(使它作爲ROWNUM = 1)。
- 如果狀態碼不是A,則選擇最近SALE_DATE的記錄(使其成爲RowNum = 1)。
我想這個代碼
SELECT
[LN_NUMBER],
[RUN_DATE] ,
[SALE_DATE],
[STATUS_CODE],
[TYPE],
[PROCESSOR_ID],
ROW_NUMBER() OVER (partition by [LN_NUMBER] order by
case when [STATUS_CODE]='A' then [STATUS_CODE] end asc,
case when [STATUS_CODE]!='A' then CONVERT(DATE,[SALE_DATE]) end desc)
as 'RowNum'
FROM [dbo].[Closure ]
此代碼爲LN_NUMBER = 0201105919做工精細。但對於LN_NUMBER = 0201203909,我沒有以所需的方式獲取rowNum。
這是我得到的結果:
LN_NUMBER RUN_DATE SALE_DATE STATUS_CODE TYPE PROCESSOR_ID RowNum
0201203909 02/21/17 09/30/15 R 1 TG1 1
0201203909 02/21/17 R 2 TG1 2
0201203909 02/21/17 A 1 MW1 3
0201105919 02/21/17 08/24/16 S 2 MW1 1
0201105919 02/21/17 08/24/16 S 2 MW1 2
0201105919 02/21/17 07/01/15 R 2 TG1 3
任何人都可以請幫我this.I正在使用SQL Server 2014非常感謝您的寶貴時間,並幫助
什麼,如果有多個行與狀態'A'?如何處理sale_date中的空值? –
@vkp我們只需要選擇一行。 – Please
好的,你只需要選擇一行。你如何打破領帶? – Paparazzi