繁体   English   中英

SQL查询如何确保ROW_NUMBER()OVER(PARTITION BY…在结果集中始终具有ROW_NUMBER ='1'

[英]SQL Query How to ensure that ROW_NUMBER() OVER(PARTITION BY… always has a ROW_NUMBER = '1' in result set

我创建了一个视图,该视图返回每个记录的行号。 我的要求是结果必须始终具有第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条记录。

有人知道我该如何强迫这种情况发生?

谢谢!

您的PARTITION BY需要与您的RECORD_ID匹配

在这种情况下应该

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

您在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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM