从与DB2中

时间:2018-04-04 10:50:10

标签: sql group-by db2 subquery max

我有以下表格:

表一:

 etu |  nr |
  1     2
  2     2
  2     3
  2     1
  3     4
  3     9

表A:

 etu | rsp | nr
  2     8    2
  2     7    3
  2     3    1
  3     2    4
  3     6    9

现在我想要的结果表是

 etu  |  nr | rsp 
  2..    3     7
  3..    9     6

所以etu和nr被链接在一起,如果有多个相等的etu条目可用,则只获取具有最高nr的条目,并在结果表中添加rsp值。此外,如果表I中有更多的etu条目,则有...添加到etu值。

解释:对于3 9 6行:表I上的最后一行是3 9,因此3是要查找的数字,9是3行的最高数字。所以我们采用它并为其添加rsp值(6)并将其添加到结果表中。对于第2行,它是相同的2 3,是表I中最高的2行。

我有类似的东西:

 select x.etu, x.rsp, y.nr from(
 select i.etu etu, max(i.nr) maxnr, a.rsp from i left join a on
 i.etu=a.etu and i.nr=a.nr group by etu)t
 inner join a x on x.etu=t.etu and x.nr=t.nr inner join y on y.etu=t.etu 
 and y.nr=t.nr

 select i.etu, max(i.nr) a.rsp from i left join a on i.etu=a.etu and 
 i.nr=a.nr grounp by

没有人甚至让我接近得到我想减少的结果...在etu之后得到正确的结果。

系统是DB10.5 Windows。

提前感谢您的帮助。

海盗

1 个答案:

答案 0 :(得分:0)

我会像这样使用CTE:

with tmp as (
  select i.etu, max(i.nr) as nt, count(*) as cnt
    from i
    group by i.etu)
select case
         when tmp.cnt = 1 then char(a.etu)
         else concat(rtrim(char(a.etu)), '..')
       end as etu,
       a.nr, 
       a.rsp
  from tmp
    left outer join a 
      on a.etu = tmp.etu
        and a.nr = tmp.nr

CTE提供加入a以获得正确回复所需的信息,并在必要时附加..