0

MSSQL

表はこんな感じ

ID    1   | 2  |  3  |  4  |  5 
AA1   1   | 1  |  1  |  2  | 1

返すクエリを作成する方法についての手がかり

ID  |  MaxNo
AA1 | 4

、上記の表の例を使用しますか? case blah whenステートメントを書くことができることは知っていますが、これを行うにはもっと簡単な方法があると感じています

4

2 に答える 2

3

を使用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

于 2013-06-20T09:34:17.577 に答える