2016-04-30 6 views
0

を複製します。どのように私はそれを非表示にできますか?ありがとう! Result screen隠す私は、クエリを持つ行のSQL

+0

見た目の重複をどのように隠すべきか誰にでもわかる前に、重複を隠すための許容基準を指定する必要があります。たとえば、引用した場合(TRM_IDが16の場合)、2つの異なるGRP_ID値(6と2)を持つクエリの最後の列はGRP_ID ...です。重複を削除したい場合は、これらの重複のどれを隠す必要がありますか?グループID 6またはグループID 2の行 – nb1987

+0

@ nb1987違いはありません。そこにあった行を隠すことができます – NickDevil

答えて

0

次の2つの方法で非表示にできます。どのGRP_ID値が隠されていても問題がなければ、おそらくGRP_ID列を含める必要はありません。その場合は、あなたのSELECT句からGRP_ID列を削除することもできますし、DISTINCT SELECTん:

SELECT DISTINCT TermMsg.TRM_ID, 
upper(TermMsg.TRM_LOCALE_CODE) as TRM_LOCALE_CODE, 
TermMsg.TRM_NAME, 
TermMsg.TRM_DESCRIPTION, 
upper(substr(TRM_NAME,1,1)) AS LETTER, 
(Term.TRM_PUBLISHED) AS PUBLISHED 
FROM EPBS_DATA.GLS_TERM_LOC TermMsg, EPBS_DATA.GLS_TERM Term left join 
EPBS_DATA.GLS_TERM_GROUP_ASSIGNMENT tga 
on Term.TRM_ID = tga.TRM_ID 
WHERE TermMsg.TRM_ID = Term.TRM_ID and TermMsg.TRM_NAME IS NOT NULL 
ORDER BY TRM_NAME; 

しかし、あなたは本当に、あなたがROW_NUMBER() functionを使用することができ、少なくともいくつかのGRP_ID値を含める必要がある場合:

SELECT q.* 
FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY TermMsg.TRM_ID ORDER BY tga.GRP_ID) AS ROWNUM, TermMsg.TRM_ID, 
upper(TermMsg.TRM_LOCALE_CODE) as TRM_LOCALE_CODE, 
TermMsg.TRM_NAME, 
TermMsg.TRM_DESCRIPTION, 
upper(substr(TRM_NAME,1,1)) AS LETTER, 
(Term.TRM_PUBLISHED) AS PUBLISHED, 
tga.GRP_ID 
FROM EPBS_DATA.GLS_TERM_LOC TermMsg, EPBS_DATA.GLS_TERM Term left join 
EPBS_DATA.GLS_TERM_GROUP_ASSIGNMENT tga 
on Term.TRM_ID = tga.TRM_ID 
WHERE TermMsg.TRM_ID = Term.TRM_ID and TermMsg.TRM_NAME IS NOT NULL 
) q 
WHERE q.ROWNUM = 1 
ORDER BY q.TRM_NAME; 

私はあなたのスキーマをテストするデータベースがありませんが、私はそのクエリが動作するはずだと信じています。これは、SELECT DISTINCTが機能しない重複を削除する必要がある場合、Oracleではかなり一般的なパターンです。クエリがサブクエリとして埋め込まれる必要があることがわかります。外部問合せは、ROWNUMが1と等しい場所を選択します。キーは、TRM_ID列によってパーティション化されていることです。基本的には、最終出力で一意にする列をPARTITION BYで指定します。

(あなたは、最終的な出力でROWNUM、その代わりにSELECT Qをしたくない場合。*あなたは、サブクエリから個別たい各列を選択することができます。)

0

代替をnb1987のアプローチを使用してROW_NUMBERは、望ましくない重複(GRP_ID)の原因となっているもの以外のすべての出力列でGROUP BYを使用することになります。 SELECTでは、実際に列が必要な場合はMIN/MAXをGRP_IDとともに使用できますが、選択されている行が気にしません(なぜ?!)。

これはnb1987のソリューションよりも優れているか悪い結果になる可能性がありますので、データで確認してみると意味があります。

関連する問題