Avatar billede larsmartin Praktikant
10. april 2015 - 13:21 Der er 5 kommentarer og
1 løsning

Max function med returnering af kolonneoverskrift

Hej,
Hvordan finder jeg max fra flere kolonner og får returneret både værdi og kolonneoverskrift?
Fra nedenstående vil jeg gerne returnere
27, col3
20, col4
89, col1
40, col2
70, col1


create table #fake
(
  id int Primary Key,
  col1 int,
  col2 int,
  col3 int,
  col4 int
)

insert into #fake values (1, 5, 9, 27, 10)
insert into #fake values (2, 3, 5, 1, 20)
insert into #fake values (3, 89, 9, 27, 6)
insert into #fake values (4, 17, 40, 1, 20)
insert into #fake values (5, 70, 5, 1, 3)


På forhånd tak:)
/Lars
Avatar billede arne_v Ekspert
10. april 2015 - 14:15 #1
SELECT MAX(col1) AS maxcol1, MAX(col2) AS maxcol2, ... FROM dintabel

?
Avatar billede Slettet bruger
10. april 2015 - 14:39 #2
Max virker på én kolonne, så data skal først ind på en kolonne og der efter skal max pr. Id findes.

select MaxTal, Col
from (
select Id, Col, max(Tal) over (partition by Id) as MaxTal
from (
select Id, col1 as Tal, 'Col1' as Col from #Fake
union all
select Id, col2 as Tal, 'Col2' as Col from #Fake
union all
select Id, col3 as Tal, 'Col3' as Col from #Fake
union all
select Id, col4 as Tal, 'Col4' as Col from #Fake
) s1
) s2
where Tal = MaxTal
Avatar billede larsmartin Praktikant
10. april 2015 - 16:35 #3
Rahp: Jeg får følgende fejl...
Msg 207, Level 16, State 1, Line 14
Invalid column name 'Tal'.

Jeg tror ikke du kan definere og bruge en ny variabel i samme sql streng
Avatar billede larsmartin Praktikant
10. april 2015 - 16:39 #4
Arne_v: med din kode får jeg bare max værdien for hver kolonne.
Det skal være maksværdien for hver række(ID), som jo måske burde tilføjes til output
ID, MaxVærdi, KolNavnForMaxVærdi
1, 27, col3
2, 20, col4
3, 89, col1
4, 40, col2
5, 70, col1
Avatar billede Slettet bruger
10. april 2015 - 19:05 #5
Der manglede select af Tal i linie 3:


select Id, MaxTal, Col
from (
select Id, Col, tal, max(Tal) over (partition by Id) as MaxTal
from (
select Id, col1 as Tal, 'Col1' as Col from #Fake
union all
select Id, col2 as Tal, 'Col2' as Col from #Fake
union all
select Id, col3 as Tal, 'Col3' as Col from #Fake
union all
select Id, col4 as Tal, 'Col4' as Col from #Fake
) s1
) s2
where Tal = MaxTal
Avatar billede larsmartin Praktikant
13. april 2015 - 09:21 #6
Det super tak for hjælpen:)
Venlig hilsen
Lars
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester