Diese Lösung verwendet zuerst UNPIVOT, um die Spalten in Zeilen umzuwandeln.
und ROW_NUMBER, um eine Zahl für die Bestellung basierend auf dem Wert zu erhalten.
Dann wird PIVOT für diese Zeilennummer verwendet, um die obersten 3 Spalten zu erhalten.
-- using a table variable to demonstrate
declare @T table (c1 varchar(1), c2 int, c3 int, c4 int, c5 int, c6 int);
-- test data
insert into @T (c1,c2,c3,c4,c5,c6) values
('A', 1, 5, 10, 7, 9),
('B', 11, 12, 30, 5, 4),
('C', 5, 6, 7, 2, 20),
('D', 3, 5, 4, 1, 2);
select c1, [1] as Max1, [2] as Max2, [3] as Max3
from
(
select
c1, upper(col) as col,
row_number() over (partition by c1 order by val desc, col) as rn
from @T t
unpivot (val for col in (c2, c3, c4, c5, c6)) up
) q
pivot (max(col) for rn in ([1],[2],[3])) as p
Ergebnisse:
c1 Max1 Max2 Max3
A C4 C6 C5
B C4 C3 C2
C C6 C4 C3
D C3 C4 C2
Shouting bekommt man nirgends gezeigt Mühe, die Sie Antworten bekommt. – HoneyBadger
@HoneyBadger hat Recht. Probieren Sie http://sqlfiddle.com/, um zu demonstrieren, was Sie getan haben – kenfire
Markieren Sie auch Ihre Frage mit der Datenbank, die Sie verwenden. –