webForumDet fria alternativet

villkor if i en Select sats ger ej önskat värde

Databaser & SQL

3 svar · 356 visningar · startad av max

Medlem sedan jan. 200090 inlägg
Frågan#1

Hej

Hur har ni det i sommarvärmen, behöver hjälp.

Vill få ut en lista i en datagrid och har skrivit en lagrad procedur som inte vill fungera som jag vill. Har ett villkor på Fakturerad om den är 0 skall den summeras och visas i listan. Koden ser ut som nedan och resultatet skall vara

Kundnr Namn Modul Antal ej fakturerade
1 Test 1 Modul1 12
1 Test 1 Modul2 5
2 Test 2 Modul1 -
2 Test 2 Modul2 5

SELECT S.KundNr AS Kundnr, S.Namn AS Namn, sModul as Modul, if L.Fakturerad = '0' THEN COUNT(L.Fakturerad) ELSE '-' AS Antal END IF
FROM System S INNER JOIN
Logg L ON S.KundNr = L.KundNr
WHERE L.DemoKund = '0' AND sModul = @Modul AND S.TestFtg is null OR s.TestFtg = '0'
GROUP BY S.KundNr, S.Namn, sModul
ORDER BY S.KundNr

Detta ger felaktig syntax nära then.

Hoppas ni är med på problemet, hör annars av er.

Medlem sedan juni 200032 967 inlägg
#2

Jag skulle använda CASE istället för IF. Dock finns ett problem; en summa av någonting är ett tal, dvs inte samma datatyp som '-'. Så antingen får du typkonvertera i frågan, eller välja null istället, och hantera det i applikationen.

red: Bytte heltal mot tal, eftersom det faktiskt kan vara decimaler i en summa. ;-)

Mvh

Medlem sedan dec. 200012 464 inlägg
#3

Dvs

 SELECT S.KundNr AS Kundnr, S.Namn AS Namn, sModul as Modul, case when L.Fakturerad = '0' THEN COUNT(L.Fakturerad) end  AS Antal

Jag skulle nog också lägga till lite parenteser i where för att få rätt precedens.

Medlem sedan jan. 200090 inlägg
#4

Tack för den fina och snabba hjälp. Ni gör så att vardagen känns lika lycklig som helgen.

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