如何根据SQL*/Oracle报表中的另一个字段比较一个字段中的两个值?

如何根据SQL*/Oracle报表中的另一个字段比较一个字段中的两个值?,sql,oracle10g,sqlplus,oraclereports,Sql,Oracle10g,Sqlplus,Oraclereports,我在一个名为table\u family的表中有三个字段 一种是“关系”,它有三种价值观:一种是个人价值观,二种是父母价值观,三种是儿子价值观 另一个字段是“年龄”,它包含第一个表中所有关系的年龄 第三个字段用于族号 现在,这种关系可以像同一个家庭的四个儿子和两个父母一样重复 这是一个例子: 家庭关系年龄 1 1 25 1 2 40 1 2 35 1 3 30

我在一个名为
table\u family
的表中有三个字段

一种是“关系”,它有三种价值观:一种是个人价值观,二种是父母价值观,三种是儿子价值观

另一个字段是“年龄”,它包含第一个表中所有关系的年龄

第三个字段用于族号

现在,这种关系可以像同一个家庭的四个儿子和两个父母一样重复 这是一个例子:

家庭关系年龄 1 1 25 1 2 40 1 2 35 1 3 30 1 3 28 1 3 29 2 1 30 2 2 40 2 3 12 现在,我想生成一个报告,其中显示一个错误,即: 当父(关系=2)和子(关系=3)之间的差值小于12时,这是一个错误

我尝试了以下代码:

select family from table_family
group by family
having
SELECT  family

FROM table_FAMILY 

GROUP BY 

     family
HAVING
((
 MAX(DECODE ( relation,2,age ))  
-  MAX(DECODE ( relation,3,age ))
 ) 
 <12 )
 OR
 (
 (SELECT MIN(age) FROM table_FAMILY WHERE relation=2) -(SELECT MIN(age) FROM       table_FAMILY WHERE relation=3) < 12

 )
从表中选择族\u族
按家庭分组
有
选择族
来自table_族
分组
家庭
有
((
最大值(解码(关系,2,年龄))
-最大值(解码(关系,3,年龄))
) 
12则不应列出(不是错误)


有什么需要帮忙的吗?

也许是这样的

select *
from table_family f1 join table_family f2 on f1.family = f2.family
where f1.relation = 2 and f2.relation = 3
 and f1.age - f2.age <= 12
选择*
从表_族f1连接f1上的表_族f2.family=f2.family
其中f1.relation=2和f2.relation=3

年龄我不明白,一家有两个不同的父亲吗?你怎么知道哪一个是三个不同儿子的父亲?一家有父亲和母亲(关系=2)和三个儿子(关系=3),依此类推,因为二家有一个父亲和一个儿子你能展示你想要的输出吗(你给出的例子)…由于您在第一个答案中的评论不清楚…就查询而言,请将父年龄与其每个子年龄进行比较…我将最终输出放在问题中,希望现在这是清楚的。这不会起作用,因为例如f1.age可以只有2个值,f2.age可以有4个值,那么比较将只在相同的记录中进行,并且我所做的是nt是将每个父母与每个儿子进行比较,当差异小于12时,这是一份报告。 family difference between parent and son 1 10 1 12 1 11 1 5 1 7 1 6
select *
from table_family f1 join table_family f2 on f1.family = f2.family
where f1.relation = 2 and f2.relation = 3
 and f1.age - f2.age <= 12