我有以下表格:
表一:
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。
提前感谢您的帮助。
海盗
答案 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
以获得正确回复所需的信息,并在必要时附加..
。