我有一个结果集,从一个 View 返回,返回一个项目列表和它们起源的国家,一个例子是:
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
我想查询这个数据,返回所有列(比ID
、Description
和Country_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
这背后的原因是,我们正在使用 Jasper 报告,需要在这些项目旁边显示一个星号(或者在本例中为数字),以解释有关该国家/地区的一些详细信息。所以报告看起来像这样:
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
我很难尝试为每个国家/地区生成一个唯一的数字,每次运行报告时从一个开始,在找到新国家时增加它并跟踪分配它的位置。我会冒险猜测使用临时表来做这样的事情,但我觉得这太过分了。
问题
- 这种事情在 Oracle SQL 中是否可行,或者我是否正在尝试做一些相当庞大和繁琐的事情?
- 是否有更好的方法在 Jasper 报告中执行此操作?
目前,我只是在考虑在每个单独的项目下设置潜台词并多次重复相同的信息,以避免这种情况,而不是将它们聚合在一起并只设置一次潜台词。它不干净,但可以避免这种相当奇怪的麻烦。
最佳答案
您正在寻找 dense_rank()
:
select t.*, dense_rank() over (order by country_name) as country_relation
from t;
我不知道这是否可以在 Jasper 报告中完成。但是,在 Oracle 中设置 View 来处理此问题非常容易。
关于sql - Oracle SQL - 根据列中的值为结果集中的每一行提供唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39408649/