2017-08-09 73 views
0

我已經創建了一個視圖,該視圖爲每條記錄返回一個行號我的要求是結果必須始終有第1行,增加1.只要從給定記錄中選擇了所有行項目,此工作就可以正常工作。但是,如果只選擇記錄中的部分行項目,則行所選訂單項可以或可以不具有一個行號= 1下面是我的代碼的示例:SQL查詢如何確保ROW_NUMBER()OVER(PARTITION BY ...在結果集中總是有ROW_NUMBER ='1'

SELECT a.PATID, 
     a.PATID + '_' + a.BATCHID + '_' + a.UNIQUEID AS RECORD_ID, 
     ROW_NUMBER() OVER(PARTITION_BY b.BATCHID, b.UNIQUIEID, b.LINE_ID) AS LN_NBR, 
     a.ADMIT_DT, 
     b.REV, 
     b.SERVICE_DATE AS DOS 
FROM HDR_TBL a 
LEFT JOIN LINE_ITEM_TBL b 
WHERE b.PD_STATUS = 'P' 

這裏是結果的一個例子:

PATID |RECORD_ID |LN_NBR|ADMIT_DT |REV |DOS  | 
-----|-----------|------|--------|----|--------| 
21548|017_U50_011|1  |20170721|0124|20170721| 
21548|017_U50_011|2  |20170722|0214|20170722| 
21548|017-U50_011|3  |20170723|0124|20170723| 
51245|017_U27_003|3  |20170701|0124|20170701| 
51245|017_U27_003|4  |20170702|0124|20170702| 

正如你所看到的最後2條記錄有LN_NBR = 3和4;我需要用LN_NBR = 1和2生成最後2條記錄。

任何人都有一個想法,我可以如何強制這種情況發生?

謝謝!

+0

我可以想到沒有數據庫,您的查詢將運行。 –

+2

'ROW_NUMBER()'在'OVER'子句中需要'ORDER BY' ... –

+0

也是'LEFT JOIN'需要'ON'條件 –

回答

0

PARTITION BY需要匹配您的RECORD_ID

在這種情況下應該是

OVER (PARTITION BY a.PATID, a.BATCHID, a.UNIQUEID ORDER BY <something>) 
+0

再一次,我的不好,你是正確的糾正我。 – Buddaman

0

你有你應該在PARTITION BY條件的ORDER BY條件的字段。它應該是:

SELECT a.PATID, 
     a.PATID + '_' + a.BATCHID + '_' + a.UNIQUEID AS RECORD_ID, 
     ROW_NUMBER() OVER(PARTITION_BY a.RECORD_ID ORDER BY b.BATCHID, b.UNIQUIEID, b.LINE_ID) AS LN_NBR, 
     a.ADMIT_DT, 
     b.REV, 
     b.SERVICE_DATE AS DOS 
FROM HDR_TBL a 
LEFT JOIN LINE_ITEM_TBL b 
WHERE b.PD_STATUS = 'P' 
相關問題