webForumDet fria alternativet

Ersätta null med ett värde vid join

Databaser & SQL

3 svar · 387 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#1

Hej

Jag ska ta fram antalet sålda böcker för varje bok kategori och självklart så har läraren gjort så att det finns kategorier där det inte har sålts några böcker (jobbiga typer! ;)) och där ska det då skrivas 0. Hur gör man det? Som det är nu så blir det ett tomt fält, antar att det är null. Kör Oracle 9 och SQL satsen ser ut såhär,

SELECT TYPE_OF_BOOK.NAME, SUM(ITEM_OF_INVOICE.QUANTITY)
FROM TYPE_OF_BOOK
LEFT JOIN BOOK ON BOOK.TYPE_ID=TYPE_OF_BOOK.ID
LEFT JOIN ITEM_OF_INVOICE ON ITEM_OF_INVOICE.ISBN=BOOK.ISBN
GROUP BY TYPE_OF_BOOK.NAME;

/Viktor

Medlem sedan juni 200032 967 inlägg
#2

Är det alltså SUM(ITEM_OF_INVOICE.QUANTITY) som blir null?

Jag hade testat att använda funktionen nvl() för att byta eventuellt nullsvar till en nolla. Så, nu har du något att söka på. :)

mvh

Medlem sedan dec. 200012 464 inlägg
#3
SUM(case when ITEM_OF_INVOICE.QUANTITY is null then 0 else ITEM_OF_INVOICE.QUANTITY end)
Medlem sedan aug. 20021 752 inlägg
#4

Tack LarsG, fungerar perfekt :)

@nders: nvl fungerade också,

SELECT TYPE_OF_BOOK.NAME, NVL(SUM(QUANTITY),'0')
FROM TYPE_OF_BOOK
LEFT JOIN BOOK ON BOOK.TYPE_ID=TYPE_OF_BOOK.ID
LEFT JOIN ITEM_OF_INVOICE ON ITEM_OF_INVOICE.ISBN=BOOK.ISBN
GROUP BY TYPE_OF_BOOK.NAME;

/Viktor

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)