sql - Oracle SQL - 根据列中的值为结果集中的每一行提供唯一标识符

标签 sql oracle jasper-reports

我有一个结果集,从一个 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

我想查询这个数据,返回所有列(比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

这背后的原因是,我们正在使用 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

我很难尝试为每个国家/地区生成一个唯一的数字,每次运行报告时从一个开始,在找到新国家时增加它并跟踪分配它的位置。我会冒险猜测使用临时表来做这样的事情,但我觉得这太过分了。

问题

  1. 这种事情在 Oracle SQL 中是否可行,或者我是否正在尝试做一些相当庞大和繁琐的事情?
  2. 是否有更好的方法在 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/

相关文章:

oracle - 如何在Oracle View 中添加 'WITH READ ONLY'约束

java - 使用 JasperReports 库和 MongoDB 生成 PDF

mysql - 在MySQL中,如何在连接公共(public)列时查询多个表对列的计数

sql - Postgresql 级联删除

mysql - 在SQL中模拟环(代数)

java - jasperreport呈现空pdf

jasper-reports - 如何在 Jasper Reports 中相对于数据宽度拉伸(stretch)文本字段

sql - 如何设计一个数据库来存储不同分辨率的OHLC时间序列?

java - 单条数据库记录插入失败是否需要回滚?

sql - 选择部分数据