RulleRimfrost Skrevet 1. mars 2006 Del Skrevet 1. mars 2006 (endret) 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 1. mars 2006 av RulleRimfrost Lenke til kommentar
Mr. Floppy Skrevet 1. mars 2006 Del Skrevet 1. mars 2006 (endret) 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 Endret 1. mars 2006 av Mr. Floppy Lenke til kommentar
roac Skrevet 1. mars 2006 Del Skrevet 1. mars 2006 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
Mr. Floppy Skrevet 1. mars 2006 Del Skrevet 1. mars 2006 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
RulleRimfrost Skrevet 1. mars 2006 Forfatter Del Skrevet 1. mars 2006 (endret) 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 1. mars 2006 av RulleRimfrost Lenke til kommentar
RulleRimfrost Skrevet 1. mars 2006 Forfatter Del Skrevet 1. mars 2006 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... Lenke til kommentar
kaffenils Skrevet 1. mars 2006 Del Skrevet 1. mars 2006 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
RulleRimfrost Skrevet 1. mars 2006 Forfatter Del Skrevet 1. mars 2006 (endret) 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 1. mars 2006 av RulleRimfrost Lenke til kommentar
roac Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 (endret) 100-(-50) = 150 100+(-50) = 50 Dette bør såvel økonomer som utviklere kjenne til Endret 2. mars 2006 av roac Lenke til kommentar
kaffenils Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 100-(-50) = 150100+(-50) = 50 Dette bør såvel økonomer som utviklere kjenne til 5686367[/snapback] Ouch :!: Lenke til kommentar
RulleRimfrost Skrevet 2. mars 2006 Forfatter Del Skrevet 2. mars 2006 (endret) Vi gjør vel det 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 2. mars 2006 av RulleRimfrost Lenke til kommentar
kaffenils Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 Vi gjør vel det 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
RulleRimfrost Skrevet 2. mars 2006 Forfatter Del Skrevet 2. mars 2006 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 ) 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
kaffenils Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 Jeg vil ha :Rad1 : 100-25=75 Rad2 : -100--25=-75 (jeg har -100 og legger til 25, og skal da ha -75 ) 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
kaffenils Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 Jeg har til og med testet det selv: laget en tabell, la inn de to eksempelradene og kjørte select-statementet. Svaret ble 0. Lenke til kommentar
RulleRimfrost Skrevet 2. mars 2006 Forfatter Del Skrevet 2. mars 2006 Sorry for den falske alarmen. Det var min egne sløvhet i påfølgende WHERE-kriterier. Jeg er nå fullbåren sql-programmør og debugger. Håper på høy aktivitet på database-forum slik at tråden havner på side 2 snart... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå