Talend中唯一记录的条件SQL查询

时间:2015-12-20 08:46:54

标签: sql oracle conditional unique talend

enter image description here 这是我的Oracle数据库中的数据。

我需要附加excel文件的数据加载。  附件包含单位编号及其类型(D_NUMBER)及其值(R_Value)的数据。

要求如下:

1)对于每个单位号码,我需要有1条记录

2)如果单元序列号有多个记录,则使用的逻辑是: - 考虑以F开头的D_NUMBER记录 - 如果我们有多个记录,其中D_NUMBER以F开头,我们需要考虑该集合中的Max D_NUMBER。 - 如果单位编号没有以F开头的D_NUMBER,那么我们需要考虑从G或E开始的D_NUMBER - 如果单位编号确实有D_NUMBER从F或G开始,那么我们需要考虑从G开始的D_NUMBER

这是所需的输出: enter image description here

如何设计Talend作业以满足要求或构建SQL查询以在talend中使用它?

1 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBERRANK分析功能对结果进行排名。他们都使用ORDER BY条款。在ORDER BY中,您可以使用DECODECASE来有条件地订购行。

SELECT *
FROM (
  SELECT UNIT_NUMBER,
         D_NUMBER,
         R_VALUE,
         ROW_NUMBER() OVER(PARTITION BY UNIT_NUMBER
                           ORDER BY DECODE(SUBSTR(D_NUMBER, 1, 1),
                                           'F', 1,
                                           'G', 2,
                                           'E', 3,
                                                4),
                                    D_NUMBER DESC)  N_ROW
   FROM   <your_table_name>)
WHERE N_ROW = 1

此外,您还不清楚是否需要最大D_NUMBER字符串或最大数值。在示例中,我只是将D_NUMBER放入ORDER BY。如果需要其数值,可以使用正则表达式从字符串中提取数字并转换为数字。

TO_NUMBER(REGEXP_SUBSTR(D_NUMBER, '\d+'))