2017-06-20 11 views
0

問題があります。理由を知らない。行番号のパーティションが機能しません。

select ROW_NUMBER() OVER (PARTITION BY a.rmid, c.nama ORDER BY a.tanggalrekam) rn, 
     a.rmid, a.psid, c.nama, a.tanggalrekam 
from _tRekamMedis a 
inner join _tRekamMedisTindakan b on a.rmid= b.rmid 
inner join _tPasien c on a.psid = c.psid 
inner join _tSecurityUser d on b.dokterid = d.securityuserid 
inner join _tTindakan e on b.tindakanid = e.tindakanid 

結果は:

rn rmid psid nama  tanggalrekam dokterid 
    1 1  1  Fauzan  2017-06-20  -2147483648 
    2 1  1  Fauzan  2017-06-20  -2147483648 
    3 1  1  Fauzan  2017-06-20  -2147483648 
    1 2  2  Huri  2017-06-20  -2147483648 

それは次のようになります。rownumberは動作しません

rn rmid psid nama  tanggalrekam dokterid 
    1 1  1  Fauzan  2017-06-20  -2147483648 
    1 1  1  Fauzan  2017-06-20  -2147483648 
    1 1  1  Fauzan  2017-06-20  -2147483648 
    2 2  2  Huri  2017-06-20  -2147483648 

。それはrnフィールドに表示されます。誰でも助けることができますか?

+0

はa.rmid BY(PARTITION OVERランク() 'この'選択ランクのような() 'でそれを試してみてください、c.nama ORDER BY a.tanggalrekam)rn、 a.rmid、a.psid、c.nama、a.tanggalrekam ..... ' –

+2

これは動作します、これは' row_number'の動作です:レコードを列挙します同じパーティション内にあります。ここには 'rmid、nama'の2つのパーティションがあります。最初のレコードには3つのレコードが含まれているため、 'rn = 1,2,3 'です。 –

+0

必要に応じて、row_number、dense_rank、rank関数を使用できます。彼らはほとんど似ていますが、独特の違いがあります。おそらくそれはあなたが見直したいかもしれないものです。 – PrinceKayastha

答えて

3

明らかにa.rmid、c.namaごとに数字が必要ないので、PARTITION BY句を完全に削除してください。あなたは、単に任意のパーティションのないDENSE_RANKを探しています:

SELECT DENSE_RANK() OVER (ORDER BY a.rmid, c.nama a.tanggalrekam) AS rn, 
... 
0

は、パーティションのすべての列を含める

select ROW_NUMBER() OVER (PARTITION BY a.rmid, a.psid,c.nama,a.tanggalrekam ORDER BY a.tanggalrekam) rn, 
     a.rmid, a.psid, c.nama, a.tanggalrekam 
from _tRekamMedis a 
inner join _tRekamMedisTindakan b on a.rmid= b.rmid 
inner join _tPasien c on a.psid = c.psid 
inner join _tSecurityUser d on b.dokterid = d.securityuserid 
inner join _tTindakan e on b.tindakanid = e.tindakanid 
+0

最初の3行はすべて(非ROW_NUMBER()ベースの)列で同じ値を持っているので、それらのすべてでパーティション化すると、3つの行すべてがパーティション内で「1」になることはありますか? –

+0

あなたの右の人、shoudlは密であるか、ちょうど1列を得るためにCTを使う –

関連する問題