2016-09-09 8 views
2

ビューから返された結果セットと、アイテムのリストとそれらが生成された国を返します。次のようになります。Oracle SQL - 結果セットの各行に、列の値に応じて一意の識別子を与えます。

ID | Description | Country_Name 
------------------------------------ 
1 | Item 1  | United Kingdom 
2 | Item 2  | France 
3 | Item 3  | United Kingdom 
4 | Item 4  | France 
5 | Item 5  | France 
6 | Item 6  | Germany 

私はすべての列を返し、このデータを照会したかったユニークを与えるに追加余分な1で(IDDescriptionCountry_Name以上の列がありますが、私は簡潔にするためにそれらを省略しました)フィールド内にある値に応じた値Country_name

ID | Description | Country_Name | Country_Relation 
--------------------------------------------------------- 
1 | Item 1  | United Kingdom |  1 
2 | Item 2  | France   |  2 
3 | Item 3  | United Kingdom |  1 
4 | Item 4  | France   |  2 
5 | Item 5  | France   |  2 
6 | Item 6  | Germany  |  3 

これは、ジャスパーのレポートを使用しているため、その項目の横にアスタリスク(この例では数字)を表示して国の詳細を示す必要があるためです。だから、報告書は次のようになります。レポートのさらに下、その後

Desc.   Country 
Item 1  United Kingdom(1) 
Item 2  France(2)  
Item 3  United Kingdom(1) 
Item 4  France(2)  
Item 5  France(2)  
Item 6  Germany(3)  

と述べフィールドのようになります。

1: Here are some details about the UK 
2: Here are some details about France 
3: Here are some details about Germany 

私はそれぞれの側に沿って行くために固有の番号を生成しようとしている困難を抱えています新しい国が見つかったときにそれを増分し、それをどこに割り当てるかを追跡します。一時的なテーブルを使ってそのようなことをするのは危険ですが、それは過度だと感じています。

質問

  1. は、Oracle SQLで可能なこの種のものですか、私はむしろ大きくて扱いにくい何かをしようとするのですか?
  2. ジャスパーのレポートの中でこれを行うより良い方法はありますか?現時点で

は、私だけではなく、彼らが集約されたと一度言外の意味を持つよりも、この状況を回避するために、単に個々の項目の下にサブテキストを持つと同じ情報を何度も繰り返し見ています。それはきれいではありませんが、これはむしろ奇妙な面倒を節約します。

答えて

4

あなたはdense_rank()を探しています:

select t.*, dense_rank() over (order by country_name) as country_relation 
from t; 

ジャスパーレポート内でこれを行うことができる場合、私は知りません。ただし、Oracleでこれを処理するビューを設定することは簡単です。