MSSQL
表はこんな感じ
ID 1 | 2 | 3 | 4 | 5
AA1 1 | 1 | 1 | 2 | 1
返すクエリを作成する方法についての手がかり
ID | MaxNo
AA1 | 4
、上記の表の例を使用しますか? case blah whenステートメントを書くことができることは知っていますが、これを行うにはもっと簡単な方法があると感じています
MSSQL
表はこんな感じ
ID 1 | 2 | 3 | 4 | 5
AA1 1 | 1 | 1 | 2 | 1
返すクエリを作成する方法についての手がかり
ID | MaxNo
AA1 | 4
、上記の表の例を使用しますか? case blah whenステートメントを書くことができることは知っていますが、これを行うにはもっと簡単な方法があると感じています
を使用UNPIVOT
して、これらの同等のアイテムを正しく1、同じ列に取得し、次に を使用ROW_NUMBER()
して最大値の行2を見つけることができます。
declare @t table (ID char(3) not null,[1] int not null,[2] int not null,
[3] int not null,[4] int not null,[5] int not null)
insert into @t (ID,[1],[2],[3],[4],[5]) values
('AA1',1,1,1,2,1)
;With Unpivoted as (
select *,ROW_NUMBER() OVER (ORDER BY Value desc) rn
from @t t UNPIVOT (Value FOR Col in ([1],[2],[3],[4],[5])) u
)
select * from Unpivoted where rn = 1
結果:
ID Value Col rn
---- ----------- ------------------------- --------------------
AA1 2 4 1
1同じ「ドメイン」からのデータが同じテーブルの複数の列に表示されている場合 (そのような値を比較することさえ理にかなっているような場合)、それは通常、データの一部が誤って分割されている属性分割の兆候です。列名の一部を形成するために使用されます。
2あなたの質問では、「行ごと」と言っていますが、1 行のサンプルしか与えていません。ID
値が行ごとに一意であると仮定し、それぞれの最大値を個別に見つけたい場合は、 asID
を記述して、探している結果を取得します (願っています)。ROW_NUMBER()
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Value desc) rn