获取具有多个列的相同行以及其他行

时间:2016-06-21 13:39:59

标签: sql oracle postgresql plsql postgresql-9.1

我有一个视图会产生以下行。

comp     Sub-comp   Lognum  id          Firname     LAstname

AK       AK-G       0       3897          ABC         DEF
AK       AK-G       0       5432          mark        ray   
MC       MC-A       0       1234          john        steve
MC       MC-A       0       5678          dan         pitcher
MC       MC-A       0       9843          james       robin
MC       MC-A       84      1234          john        steve
MC       MC-A       84      5678          dan         pitcher
MC       MC-A       84      9843          james       robin

我想只获取具有lognum的行(如果同一行的0也作为lognum)以及其他只有0作为lognum的行。

结果表应该是这样的

comp     Sub-comp   Lognum  id          Firname     LAstname

AK       AK-G       0       3897          ABC         DEF
AK       AK-G       0       5432          mark        ray   
MC       MC-A       84      1234          john        steve
MC       MC-A       84      5678          dan         pitcher
MC       MC-A       84      9843          james       robin

查询的大纲如下

create view view1 as
select 
comp, Sub-comp, "00" as Lognum,  id ,Firname ,LAstname
from
table A
inner joins---
UNION
select 
select 
comp, Sub-comp, Lognum, id ,Firname ,LAstname from 
table B
inner joins----
;

有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

select * from(
    select comp,
           Sub-comp,
           Lognum,
           id,
           Firname,
           LAstname,
           row_number() over(partition by id order by lognum desc) rn
    from table_name)
where rn = 1;

这将显示具有按ID分组的最大lognum的行。

答案 1 :(得分:0)

此查询应该有效,即使对于给定的id值,您有多个"非零" lognum行。

如果查看where子句,则始终返回具有非零lognum值的行(t.Lognum != 0)。但是,具有零lognum值的行也将返回,但仅当t.rn = 1条件为真时才会返回,只有在没有任何其他非零lognum的情况下才会返回id条件order by 1}}(参见row_number()窗口函数的select t.comp, t.Sub-comp, t.Lognum, t.id, t.Firname, t.LAstname from (select t.*, row_number() over ( partition by t.id order by case when t.lognum = 0 then 1 else 0 end) as rn from your_view t) t where t.Lognum != 0 or t.rn = 1 子句)。

a <- matrix(0,ncol=2,nrow=0)
large <- paste("some_string_",1:200,sep=" ")
a <- rbind(a,toString(large))
a <- rbind(a,toString(large))
a <- rbind(a,toString(large))
a <- rbind(a,toString(large))
a <- rbind(a,toString(large))
a <- rbind(a,toString(large))
a <- rbind(a,toString(large))
print(a)