5

フィールド1とフィールド2に固有のレコードを取得し、フィールド4の行を選択して、優先度がnullではなく値になるようにしてテーブルをクエリしたいと思います。

例:元のテーブル

field1  field2  field3  field4
  1       B       A     (null) 
  1       B       A       2   
  2       C       A       3   
  2       D       A     (null)
  3       D       F       3   
  2       C       A       3   

そして、私が出力クエリから取得したいのは次のようなものです。

field1  field2  field3  field4
  1       B       A       2   
  2       C       A       3   
  2       D       A     (null)
  3       D       F       3   

これを達成するためのSQLテーブル結合手法/フィルタリングの効率的な方法はありますか?ありがとう

P / S-混乱を避けるために、field1とfield2のみを区別する目的は、field3が異なる値を持つ可能性があるため、選択された行は、field4の優先度がnullではない行に基づいているためです。

例えば

field1  field2  field3  field4
  1       B       A     (null)   
  1       B       C       2       <- this will be the chosen one
4

2 に答える 2

7

これを試して:

最初の3つのフィールドでグループ化し、filed4のMAX()を取得する必要があります。

select "field1","field2","field3",max("field4")
from Table1
group by "field1","field2","field3"
order by "field1"


SQLフィドルデモ

編集:

グループ化の一部としてfield1とfield2のみが必要な場合は、次のことを試してください。

select "field1","field2","field3","field4"
from(
select "field1","field2","field3","field4",
        row_number() 
        over(partition by "field1","field2" order by "field4" desc) as rn
from Table1)A
where A.rn=1


SQLフィドルデモ2

于 2012-10-25T07:00:41.680 に答える
1

maxを使用できますが、正しいフィールドを選択する必要があります3。これはそれを行います:

select field1, 
   field2 , 
   max(field3) keep (dense_rank first order by field4 desc) as field3, 
   max(field4)
from Table1
group by field1, field2 ,field3,
order by field1, field2
于 2012-10-25T07:21:03.997 に答える