Avatar billede zeptic Nybegynder
31. januar 2002 - 14:23 Der er 8 kommentarer og
1 løsning

max() på række

Hvorledes kan jeg returnere den største værdi fra flere felter i en række?

Eksempel:
Hvis jeg har en tabel der ser således ud:

ID  A  B  C  D
1  12  6  23  2
2  3  33  22  10
3  55  2  75  44

Så vil jeg gerne have en sql-forespørgsel i stil med:

SELECT id, max(A,B,C,D) as max
FROM tabel

Og resultatet skulle gerne blive:
ID  MAX
1    23
2    33
3    75

PS: Jeg benytter DB2 version 7.1
Avatar billede fri-hash Nybegynder
31. januar 2002 - 14:31 #1
det tror jeg ikke man kan .....
du må nok selecte alle kolonner og så lave et program der kan teste hvilken kolonne der indeholder den største værdi
Avatar billede zeptic Nybegynder
31. januar 2002 - 14:33 #2
hmmm...
Kan jeg så lave det vha. af en UDF (User Defined Function)? Og i såfald hvordan gør jeg det så nemmest?
Avatar billede teepee Nybegynder
31. januar 2002 - 15:00 #3
eller du kan bruge

select greatest(greatest(greatest(a,b),c),d)
Avatar billede teepee Nybegynder
31. januar 2002 - 15:23 #4
hvis denne funktion ikke findes i DB2 så skal du lave en tilsvarende UDF med samme navn og logikken hedder så (i pseudo):

greatest(x int,y int) return n int
if x >= y then
  return x
else
  return y
end if
Avatar billede terry Ekspert
31. januar 2002 - 15:31 #5
place the following in a module
Function getmax(A As Long, B As Long, C As Long, D As Long) As Long
Dim w As Long

    w = IIf(A > B, A, B)
    w = IIf(C > w, C, w)
    w = IIf(D > w, D, w)
   
    getmax = w
   
End Function

then make a query
SELECT tblABCD.ID, getmax([A],[B],[C],[D]) AS Highest
FROM tblABCD;
Avatar billede terry Ekspert
31. januar 2002 - 15:37 #6
The answer I gave was for Access!
Avatar billede zeptic Nybegynder
01. februar 2002 - 11:38 #7
teepee: Greatest() findes ikke i db2.
terry: sorry, has to be for db2
Avatar billede zeptic Nybegynder
01. februar 2002 - 11:40 #8
Jeg har været nødsaget til at lave det som en UDF. Hvis nogen ønsker det kan jeg godt poste resultatet.
Avatar billede krommes Nybegynder
08. februar 2007 - 00:22 #9
Løsning:
create table maxx (id int, a int, b int, c int);
insert into maxx values( 1,91,2,3);
insert into maxx values( 2,1,92,3);
insert into maxx values( 3,1,2,93);
SELECT id,case when a < b then
            case when b<c then c else b end
            else
            case when a<c then c else a end
          end as max
from maxx order by id;
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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