Avatar billede nat Nybegynder
21. september 2006 - 09:45 Der er 5 kommentarer og
1 løsning

SUM af Alias

Hej Eksperter,

Hvis jeg har en lignende sql:

select sum(a.antal) as antal, sum(a.styk) as styk, (b.total) as total
from a, b

Kan jeg så ikke lave en sum ud af alias'ne?
Eks:

select sum(a.antal) as Antal, sum(a.styk) as Styk, (b.total) as total, sum(Antal * Styk) as Resultat
from a, b

Eller er der en anden fiks måde at bruge mellemresultater på i SQL?
Avatar billede lorentsnv Nybegynder
21. september 2006 - 10:08 #1
Du kan lave en noget i rætning af:

Select c.*, c.antal * c.total as Resultat
from (
    select sum(a.antal) as antal, sum(a.styk) as styk, (b.total) as total
    from a, b
    where a.id = b.id
    ) c

Jeg her tilføjet en where i den inderste sql. Du må vel på en eller anden måde linke tabel a og b, enten med where, eller join.
Avatar billede lorentsnv Nybegynder
21. september 2006 - 10:12 #2
Undskyld, det skal eventuelt være:

Select c.*, c.antal * c.stkResultat
from (
    select sum(a.antal) as antal, sum(a.styk) as styk, (b.total) as total
    from a, b
    where a.id = b.id
    ) c

I princippet budre det vel også fungere som du har skrevet, sum(Antal * stk) as Resultat. Ved at lave en Select udenpå en anden select, har du mulighed for at bruge resultatet af den første select, uden at skulle lave samme beregning/summering flere gange.
Avatar billede nat Nybegynder
21. september 2006 - 10:19 #3
Jeps der er selvfølgelig en where der linker de to tabeller
Avatar billede nat Nybegynder
21. september 2006 - 10:40 #4
Min sql:

select sum(Pieces.AntalIalt) as 'pieces total',
Arkiv.Leveringer, Arkiv.Kontor, Arkiv.Bilag, Arkiv.levAndre,
sum(0) as 'I ALT 1',
sum(PiecesArchive.AntalIalt) as 'piecesarchive total',
Pakker.Leveringer, Pakker.Kontor, Pakker.Bilag, Pakker.levAndre,
sum(0) as 'I ALT 2',
sum(Arkiv.Leveringer - Pakker.Leveringer) as a, sum(Arkiv.Kontor - Pakker.Kontor) as b,
sum(Arkiv.Bilag - Pakker.Bilag) as c, sum(Arkiv.levAndre - Pakker.levAndre) as d,
sum(0) as 'I ALT 3'
from Pakker, Arkiv, Pieces

WHERE (Pakker.Name ='XX') AND (Pakker.Name = Arkiv.Name) AND (Pakker.Name = Pieces.Name)

group by Pakker.Leveringer, Pakker.Kontor, Pakker.Bilag, Pakker.levAndre,
Arkiv.Leveringer, Arkiv.Kontor, Arkiv.Bilag, Arkiv.levAndre


Hvor summene:
I ALT 1 skal give et resultat af: (’pieces total’ +  Arkiv.Leveringer + Arkiv.Kontor + Arkiv.Bilag + Arkiv.levAndre)

I ALT 2 skal give et resultat af: (’piecesarchive total' + Pakker.Leveringer + Pakker.Kontor + Pakker.Bilag + Pakker.levAndre)

I ALT 3 skal give et resultat af: (a + b +c +d)

Giver det mere mening nu hvad der er jeg vil? KAn selvfølgelig også bare gøre det the hardway og skrive alle tabel og kolonne navne ud, håbede bare at man kunne bruge alias på en smart måde ud over en "titel".
Avatar billede nat Nybegynder
05. oktober 2006 - 15:01 #5
Did it the hard way.

Smider du et svar lorentsnv?
Avatar billede lorentsnv Nybegynder
05. oktober 2006 - 15:26 #6
svar :-)
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