Hej alla, här är ett problem jag har med en MS SQL Query.
Jag vill att koden ska returnera utan NULL och 0 värden.
Men eftersom subqueryn är ett alias verkar det inte fungera?
Tacksam för svar.
SELECT T.secid ,
(SELECT sum(case
when type = 'Loan'
then (shares * 1)
when type = 'Returned loan'
then (shares * -1) end)
FROM Transactions AS B
WHERE porid = 'TURKEY' AND deleted = 0 AND T.secid = B.secid) AS 'NetLoans'
FROM Transactions AS T
group by secid
HAVING 'NetLoans' > '0'
Du ska inte sätta fältnamn inom enkelfnuttar. Du jämför den konstanta strängen ¨'NetLoans' med den konstanta strängen '0'. Du kan även plocka bort fnuttarna runt nollan, även om du inte måste.
Sen vet jag inte varför du skulle behöva en subquery för detta, om frågan itne innehåller mer saker som du har tagit bort. Beroende på hur mycket MS SQL optimerar sökningen är det dessutom eventuellt dåligt prestandamässigt. För varje rad i hela tabellen utförs underfrågan, och sorteringen sker först efteråt.
SELECT T.secid ,
sum(case
when type = 'Loan'
then (shares * 1)
when type = 'Returned loan'
then (shares * -1) end) AS NetLoans
WHERE porid = 'TURKEY' AND deleted = 0
FROM Transactions AS T
GROUP BY secid
HAVING NetLoans > 0
Dessutom är det min personliga åsikt att du borde lagra återbetalningarna som ett negativt nummer i databasen. Det skulle förenkla denna kod. Då skulle du helt enkelt kunna köra sum(shares) utan case-satsen.