我创建了一个视图,为每条记录返回一个行号。我的要求是结果必须总是有一行1,增加1.只要从给定记录中选择所有行项目,这样就可以正常工作。但是,当仅选择记录中的某些订单项时,所选订单项的行号集可能有也可能没有行号= 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 :(得分:0)
您的PARTITION BY
需要与RECORD_ID
在这种情况下应该是
OVER (PARTITION BY a.PATID, a.BATCHID, a.UNIQUEID ORDER BY <something>)
答案 1 :(得分:0)
您拥有ORDER BY
条件下PARTITION 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'