Gå til innhold

Anbefalte innlegg

Hei

Jeg ønsker å kjøre en query mot en mssql 8 base, og en del av min SELECT går slik :

Sum(Objekter.Celle1-Objekter.Celle2-Objekter.Celle3) AS 'Total'

 

Jeg ønsker altså å hente ut summen av disse cellene for hver rad i tabellen Objekter, men jeg får feilmelding når en av cellene ikke har noen verdi (celle kan inneholde både NULL og negative tall). Total blir da satt til NULL selv om en av cellene har en verdi. Hvordan løser jeg det ?

Endret av RulleRimfrost
Lenke til kommentar
Videoannonse
Annonse
Kjenner ikke MSSQL 8, men i MySQL har vi for eksempel ifnull(). Altså
Sum( ifnull(Objekter.Celle1,0) - ifnull(Objekter.Celle2,0) - ifnull(Objekter.Celle3,0) ) as Total

5684009[/snapback]

Slo meg på at jeg mistet forbindelsen, men det heter isnull i MSSQL. Men, tankegangen din var selvfølgelig helt riktig :)

Lenke til kommentar

Har ikke til hensikt å kverulere om MSSQL, men med isnull tenker du vel på SQL92-standardens "IS NULL"-konstruksjon som brukes i forbindelse med en vanlig IF? Noe som blir tyngre å skrive/lese for oss mennesker enn den forenklede ifnull()-funksjonen.

 

Eller mener du at MSSQLs isnull er funksjonsekvivalent med MySQLs ifnull()? (Jeg spør siden jeg ikke kjenner MSSQL.)

Lenke til kommentar

Hm.. da får jeg :

Server: Msg 195, Level 15, State 10, Line 2

'ifnull' is not a recognized function name.

 

Det er en Windows server med Microsoft SQL server 8.0, og jeg kjører querys i SQL Query analyzer.

 

edit : ISNULL var riktig i mssql ja. Takker, funker konge nå

Endret av RulleRimfrost
Lenke til kommentar
Nytt spørsmål :

Denna her vil ikke ta med negative verdier jo...

sum(isnull(6,0)-isnull(0,0)-isnull(-2,0) as total

total gir meg her 6, mens jeg vil ha 4...

5684361[/snapback]

 

Hææ?? Mener du å si at når du kjører

select sum(isnull(6,0)-isnull(0,0)-isnull(-2,0) as total

så blir det 6? Hos meg blir det 8, som også er det riktige.

 

Er det deler av select statementet du ikke skriver her, f.eks. FROM [tabell]?

Lenke til kommentar

Hehe. Ja, jeg forenkler litt, da query'n egentlig tar en halv a4-side, og dette er bare en av radene i resultatet. Jeg lager den i MS Query Analyzer, limer den inn i Office Query, og lagrer det til Excel for økonomiavdelingen ;)

Dette er et bedre eksempel:

SELECT faktura.AvtaleNr, SUM(ISNULL(faktura.SumInklMva,0)-ISNULL(faktura.SumMva)) AS total
FROM faktura.*
GROUP BY faktura.AvtaleNr

Om ett AvtaleNr har en faktura på 100 kr og en faktura på -50, så ser total ut til å bli 150 kr for dette AvtaleNr ?? (Mulig dette stemmer for dere datamennesker, men jeg er egentlig økonom ;) )

 

edit: lagt til code

Endret av RulleRimfrost
Lenke til kommentar

Vi gjør vel det :D

 

Men åssen løser jeg det ? Har nå :

 

AvtNr |SumInklMva |SumMva

666 |100 |25

666 |-100 |-25

sum(isnull(SumInklMva,0)-isnull(SumMva,0)) as total

Med min løsning får jeg total=75, altså den skipper negative verdier plutselig ??

Testa uten isnull og da får jeg total=NULL

 

Eneste korrekte er total=0

Endret av RulleRimfrost
Lenke til kommentar
Vi gjør vel det  :D

 

Men åssen løser jeg det ? Har nå :

 

AvtNr        |SumInklMva        |SumMva

666            |100                    |25

666            |-100                  |-25

sum(isnull(SumInklMva,0)-isnull(SumMva,0)) as total

Med min løsning får jeg total=75, altså den skipper negative verdier plutselig ??

Testa uten isnull og da får jeg total=NULL

 

Eneste korrekte er total=0

5687146[/snapback]

 

Du må jo addere verdiene, ikke substrahere som du gjør.

sum(isnull(SumInklMva,0)+isnull(SumMva,0))

Da gjør SQL Server slik:

Rad 1: 100+25=125

Rad 2:-100+-25=-125

Sum:125+-125=0

 

Unnskyld, men dette er barneskole-lærdom.

Lenke til kommentar

Det er ikke logikken min som feiler, men forklaringsevnen. I ditt eksempel vil jeg få feil resultat om det kun er en linje.

 

Rad1 : InklMva + SumMva = Feil tall, rett og slett. Jeg må subtrahere SumMva fra InklMva... Det er her reglene for for økonomi desverre må gå foran reglene for sql-logikk.

 

Jeg vil ha :

Rad1 : 100-25=75

Rad2 : -100--25=-75

(jeg har -100 og legger til 25, og skal da ha -75 :hmm: )

 

Problemet er at dette gir meg 75, som om ikke sum-funksjonen "ser" verdien -75, eller om....

 

 

 

Edit : fant ut at jeg hadde en "AND (FakturaInklMva>1)" et annet sted i query'en som effektivt fjerna alle negative verdier........for Sa..n. Thx, så langt....

Lenke til kommentar
Jeg vil ha :

Rad1 : 100-25=75

Rad2 : -100--25=-75

(jeg har -100 og legger til 25, og skal da ha -75  :hmm:  )

 

Problemet er at dette gir meg 75, som om ikke sum-funksjonen "ser" verdien -75, eller om....

 

 

Jeg skjønner ikke helt hva som blir galt her?

Rad 1 gir 75 og rad 2 gir -75. Summen av disse to verdiene blir da vitterlig 0.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...