2016-06-21 11 views
0

次の行が表示されます。他の行と一緒に複数の列を持つ同じ行を取得する

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 

私はちょうど0 lognumなどを有している他の行と一緒に(同じ行が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---- 
; 

を次のようにクエリの輪郭がある誰が助けることはできますか?

ありがとうございます!これは、IDでグループ化された最大のlognumとラインが表示されます

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; 

+0

より大きいログ番号の行が必要ですか? –

+0

はいの並べ替え。行にlognumが0の場合は、lognumとして値を含む行だけが必要です。 – Cooluser

+0

これはどのデータベースですか? OracleまたはPostgres?また、同じ 'id'を持つが複数の行があり、' lognum'が非ゼロの場合、何を表示しますか?行のうちの1つだけ、またはすべての行ですか? – sstan

答えて

0

はこれを試してみてください。

0

このクエリは、指定されたid値に対して、複数の "非ゼロ"のlognum行がある場合でも機能します。

where句を参照すると、0以外の値のlognumの行が常に返されます(t.Lognum != 0)。しかし、lognum値がゼロの行も返されますが、t.rn = 1の条件が真である場合にのみ、同じidに0以外のlognumがない場合にのみ発生します(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