0

我在一个名为table_family.

一种是“关系”,它有 3 种值,1 代表人,2 代表父母,3 代表儿子。

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

第三个字段是家庭号码。

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

家庭关系年龄

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

 )

如果我使用此代码,则只会比较最大值和最小值。两者之间的值将被忽略,但我需要以相同的方式比较它们。

输出报告将类似于:

父母与儿子的家庭差异

1 10

1 12

1 11

1 5

1 7

1 6

这是我在最终报告中需要的

对于家庭 = 1,我减去父母年龄 - 儿子年龄 =

40-30=10

40-28=12

40-29=11

35-30=5

35-28=7

35-29=6

但是对于第二个家庭

40-12= 28 >12 则不应列出(不是错误)。

请问有什么帮助吗?

4

1 回答 1

0

可能是这样的?

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
于 2014-12-14T08:55:57.707 回答