viggoMedlem sedan dec. 20112 inlägg 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'
Genererar lite censurerat...
SECID|NetLoans
xxxxx | NULL
xxxxx | 0.00
xxxxx | 92000.00
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.
Edit: Ett group för mycket.
viggoMedlem sedan dec. 20112 inlägg Hej tack för snabbt svar.
Det är lyckligtvis inte jag som byggt databasen, det är ett hastjobb som skulle behöva ses över.
Precis som du säger så är alla transaktioner positiva även om det är returer...
Därav case lösningen.
det jag vill ha ut är en summering av alla transaktionerna per unikt secid fram till ett visst datum (datum lägger jag in sist i where tänkte jag).
Jag tror jag testade att skriva sådär först, men fick ett fel att den inte kunde gruppera på secid pga aggregated functions ...
Ska testa och utvärdera imorgon på jobbet. :bire