SQLサーバー - 2つの変数列を持つテーブルから最大値を選択する(Microsoft SQL)

okwaves2024-01-25  13

私は次のようなテーブルを使用しています:

開始 https://i.stack.imgur.com/uibc3.png

希望する結果は次のようになります。

結果 https://i.stack.imgur.com/v0sic.png

そこで、2 つの「組み合わせた」値から最大値を選択しようとしています。柱。値が同じ量である場合 (パート C)、結果は重要ではありません。 テーブルを最大値で並べ替えてから、distinct を使用しようとしましたが、結果は期待どおりになりませんでした。

これに対する解決策または洞察を提供していただけますか?よろしくお願いします!

row_number() とウィンドウ関数を見てみましょう。

– プレベン・ホイブレヒト

2020 年 9 月 3 日 11:50

ヒント: 画像を使用しない理由はここにあります。

– ハボ

2020 年 9 月 3 日 12:38

サンプル データは、書式設定されたテキストとして表示される方が適切です。見栄えの良いテーブルを作成する方法については、ここを参照してください。

– 

ユーザー330315

2020 年 9 月 3 日 12:50



------------------------

row_number() を使用します:

select *
from (
    select t.*, row_number() over(partition by part order by amount desc, zone) rn
    from mytable t
) t
where rn = 1

各パーツについて、金額が最も高い行が表示されます。上位タイがある場合は、列ゾーンを使用して上位タイを破ります。

同順位を許可したい場合は、代わりに次のように Rank() を使用します。

rank() over(partition by part order by amount desc) rn

0



------------------------

これは、SUB クエリを使用して実現できます

DECLARE @T TABLE(
PART VARCHAR(50),
ZONE VARCHAR(10),
Amt INT)


Insert Into @T Values ('PartA','71H',1),('PartA','75H',2),('PartB','98D',1),('PartB','98A',3),('PartC','75H',1),('PartC','52H',1)

SELECT M.PART,MIN(M.Zone) AS ZONE,S.AMOUNT
FROM @T M
INNER JOIN (
SELECT Part,MAX(Amt) as AMOUNT From @T
GROUP BY PART) S ON S.AMOUNT=M.Amt AND S.PART=M.PART
GROUP BY M.PART,S.AMOUNT
ORDER BY M.PART

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。