2016-12-15 1 views
1

私は、次のデータセットがあります。SQL Server 2008 R2 - 条件付きロジックを使用してレコードのグループをフィルタリングする方法

enter image description here

各販売注文ラインは、当社の倉庫(UPPER, GROUND, FLOOR)内の様々な場所エリアで見つけることができるアイテムを持っています。私が望むのは、各受注明細を評価し、条件に基づいて1つの場所を選択する方法です。 SOラインがFLOORと場所が含まれている場合

条件は、それがGROUNDが含まれている場合は、そのを選択するか、それはどちらも地面や床が含まれている場合、その後UPPERを返すチェック他に、唯一のその場所を選んで、と言うでしょう。

SO行ごとに複数の場所が表示されないようにするには、これができる方法は何ですか?私はHAVING句でcaseステートメントを使用するいくつかの形式を想像したいと思いますか?

+1

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

+0

各フロアに各アイテムがありますか?そうでない場合は、各項目をどのフロアで見つけることができるかを示す表がありますか? –

答えて

2

これは、条件に基づいてロケーションエリアを注文することによってrow_number機能を使用して実行できます。

select * 
from (select t.* 
     ,row_number() over(partition by so# 
         order by case when location_area='Floor' then 1 
             when location_area='GROUND' then 2 
            else 3 end) rn 
from tablename t 
) x 
where rn = 1 
+0

2番目のケースは「2」ですか? – JohnHC

+0

@JohnHC ..あなたは正しいです。私はそれを変えた。 –

+0

これは本当に美しいです。どうもありがとう。 –

0
Select coalesce(f.SO, g.SO, u.SO) SO, 
    coalesce(f.Line, g.Line, u.Line) Line, 
    coalesce(f.item_code, g.item_code, u.item_code) item_code, 
    coalesce(f.item_description, g.item_description, u.item_description) item_description, 
    coalesce(f.SO_Qty, g.SO_Qty, u.SO_Qty) SO_Qty, 
    coalesce(f.branch_Number, g.branch_Number, u.branch_Number) branch_Number, 
    coalesce(f.location_area, g.location_area, u.location_area) location_area 

from myTable f 
    full join myTable g 
     on f.location_area='floor' 
     and g.SO = f.So 
     and g.location_area='ground' 
    full join myTable u 
     on u.SO = f.So 
     and u.location_area='upper' 
関連する問題