2016-05-10 23 views
1

の最大を返す私はそうのような次のテーブルがあるとします。SQL Serverの:グループ

Parent_Company Child_Company Requested Authorized Char1 Char2 
------------------------------------------------------------------------ 
Fruits    Apples   $1000  $1000   A  10 
Fruits    Apples   $10000  $5000   E  10 
Fruits    Apples   $7000  $7000   C  15 
Fruits    Pears   $1000  $0   B  20 
Fruits    Grapes   $1000  $200   A  10 
Vegetables   Celery   $500  $500   D  17 
Vegetables   Celery   $1000  $1000   A  10 
Vegetables   Lettuce  $1000  $1000   A  10 
Vegetables   Lettuce  $2000  $0   B  12 

私は私のクエリが返すようにしたい:

Parent_Company Child_Company Requested Authorized Char1 Char2 
------------------------------------------------------------------------ 
Fruits    Apples   $7000  $7000   C  15 
Fruits    Pears   $1000  $0   B  20 
Fruits    Grapes   $1000  $200   A  10 
Vegetables   Celery   $1000  $1000   A  10 
Vegetables   Lettuce  $1000  $1000   A  10 

ここでロジックが異なるに基づいていることです親/子の組み合わせは、私はそれが最高のAuthorized量を持つ行を返すようにしたいです。

SELECT 
     Parent_company, Child_Company, Char1, Char2, Requested, 
     Max(Authorized) 
    FROM 
     Food 
    GROUP BY 
     Parent_Company, Child_Company, Char1, Char2, Requested 

しかし、それは本当に私がCHAR1、CHAR2以降に望むように働いていないし、要求された金額が変更されています

頭に浮かんだ最初に考えたのは、私は単に、クエリによって最大+グループを使用することができるということです。

私の限られた知識のSQL Serverから、私はおそらくPARTITION BYで何かを使うことができると思いますが、これでどのように接近するのか本当に分かりません。

助けていただければ幸いです。

答えて

2

あなたはパーティションと正しい軌道に乗っています。 row_number関数を使用し、[Parent_Company]、[Child_Company]を使用してデータに番号を付け、次に上の行を除外することができます。

select * from (
select *, row_number() over (partition by [Parent_Company], [Child_Company] 
           order by [Authorized] desc) as row_number 
from your_table 
) as table_alias 
where row_number = 1 
関連する問題