2016-12-19 8 views
0

いくつかのテーブルを結合するレポートを作成しています。すべてが完全にマイナス1つの側面を一緒に来た。最高のコストのみを表示するには、cost2フィールドが必要です。基本的に、アイテムは生産を通じていくつかのコスト変更を経て、最終コストが最も高くなります。私はその最終コストだけを照会する必要があります。私はその単純な解決策を知っていますが、私はそれ以上に苦労しています。SQL Server - 最高値でフィルタリング

私のクエリの簡略化した例を次に示します。
MAX関数は意図したとおりに機能しません。

SELECT DISTINCT table1.item_no, 
       table2.quantity, 
       table2.date, 
       table3.cost1, 
       MAX(table4.cost2) 
FROM table1 
    INNER JOIN table2 ON table2.item_no = table1.item_no 
    INNER JOIN table3 ON table3.item_no = table1.item_no 
    INNER JOIN table4 ON table4.item_no = table1.item_no 
WHERE table3.cost1 <> 0 
GROUP BY table1.item_no, 
     table2.quantity, 
     table2.date, 
     table3.cost1 
+1

どのように最終費用を特定しますか? –

+0

これは最後のINNER JOINの入力ミスで、ピリオドではなくカンマになっていますか? 'table1、item_no'は' table1.item_no'でなければなりません – xQbert

+0

"私が意図した通りに動かない"と定義できますか?漠然とした説明に基づいてクエリの定義のためにいくつかの擬似コードを投げ出すつもりならば、投稿したものとまったく同じように見えます。問題を理解するのに役立ちます。解決策を見つけるお手伝いができます。ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

答えて

1
SELECT table1.item_no, 
     table2.quantity, 
     table2.date, 
     table3.cost1, 
     table4.cost2 
FROM table1 
    INNER JOIN table2 ON table2.item_no = table1.item_no 
    INNER JOIN table3 ON table3.item_no = table1.item_no 
    INNER JOIN table4 ON table4.item_no = table1,item_no 
WHERE table3.cost1 <> 0 
AND table4.cost4 = (SELECT MAX(a.cost4) 
        FROM table4 a 
        WHERE 
         table4.item_no=a.item_no 
         GROUP BY a.item_no 
        ) 
1

私はあなたがrow_number()をしたいと思う:

SELECT t.* 
FROM (SELECT t1.item_no, t2.quantity, t2.date, t3.cost1, t4.cost2, 
      row_number() over (partition by t1.item_no order by t4.cost2 desc) as seqnum 
     FROM table1 t1 INNER JOIN 
      table2 t2 
      ON t2.item_no = t1.item_no INNER JOIN 
      table3 t3 
      ON t3.item_no = t1.item_no INNER JOIN 
      table4 t4 
      ON t4.item_no = t1.item_no 
     WHERE t3.cost1 <> 0 
    ) t 
WHERE seqnum = 1; 

アイテムごとに1つの行をしたいように見えるので、partition byのみ項目番号が含まれています。最もコストの高い行のすべての他の列を取得します。

関連する問題