2017-08-09 10 views
0

各レコードの行番号を返すビューを作成しました。結果には常に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| 
選択されたラインアイテムがまたは行番号を有しても有さなくてもよい= 1は、以下の私のコードの例であります

最後の2つのレコードには、LN_NBR = 3と4があります。私はLN_NBR = 1と2で最後の2レコードを生成する必要があります。

どのように私はこれが起こるように強制することができますか?

ありがとうございます!

+0

私はあなたのクエリが実行されるデータベースはないと思うことができます。 –

+2

'ROW_NUMBER()' 'OVER'節に' ORDER BY'が必要です... –

+0

また、 'LEFT JOIN'が' ON'条件を必要とします。 –

答えて

0

はあなたのPARTITION BY

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

もう一度、私の悪い、あなたは私を修正する権利です。 – Buddaman

0

あなたがPARTITION BY状態でORDER BY状態で持つべきフィールドを持つべきである。この場合、あなたのRECORD_ID

と一致する必要があります。それはする必要があります:

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' 
関連する問題