Gå til innhold

Simpelt SQL spørsmål - hente rad selv om resultat er null


Anbefalte innlegg

Hente ut daglige inntekter:

select dayofmonth(`PaidDate`) as Dag, count(*) as Antall, SUM(Amount) as 'Inntekter'
from orders where MONTH(`PaidDate`) = MONTH(NOW()) 
AND  Currency = 'GBP'
group by dayofmonth(`PaidDate`)

 

Problemet med spørringen over er at dersom en dag ikke har noen rader hvor Currency er GBP, vil hele dagen utelates fra resultatet. Dvs, jeg får en oversikt over dager hvor enkelte dager gjerne er utelatt helt.

 

Jeg ønsker en full utskrift av alle dagene i måneden, men det skal selvsagt være 0 de dagene Currency ikke er GBP.

 

Noen som har peiling på hvordan dette løses best?

Endret av John-B
Lenke til kommentar
Videoannonse
Annonse

Du må bruke en "hjelpe"-tabell som inneholder en rad pr dag for alle dagene i måneden du skal kjøre spørringen for. Du kan enten lage en permanent tabell med en kolonne 'dato' som inneholder en rad pr dag et stykke frem i tid. Du kan også la denne tabellen være en temporær tabell, hvis MySql støtter dette da.

 

Spørringen vil da spørre fra denne datotabellen og left joine Inntekter.

Lenke til kommentar
select dayofmonth(`PaidDate`) as Dag, count(*) as Antall, SUM(CASE WHEN Currency = 'GBP' THEN Amount ELSE 0 END) as 'Inntekter'

from orders where MONTH(`PaidDate`) = MONTH(NOW())

group by dayofmonth(`PaidDate`)

Tusen Takk! Det var akkurat det jeg skulle spørre om - om ikke det var en mulighet for en slags "IF-setning" i SUM. Så vidt jeg kan se fungerer denne spørringen tilstrekkelig!

 

 

Poenget med hjelpetabellen er å få med datoer i resultatet hvor det ikke finnes noen korresponderende rader i "orders" tabellen, verken med GBR eller annen valuta.

Takk for forslaget - førsteposten var kanskje en smule misvisende, siden det i mitt nåværende tilfelle ikke gjør noe om en dag mangler, så lenge den mangler i alle currencies. Er bare et veldig simpelt script jeg jobber med nå - tror jeg ser på ditt forslag når jeg skal lage noe skikkelig ut av det.

 

 

Å ha støtte for flere valutaer ble litt mindre programmeringsvennlig enn først antatt :(

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...