Dohhh, korrekt. Note to self: Husk at slappe af når man kommer hjem fra arbejde.
Men håber da der er et unikt id for et deposit ... og der ikke kun er Id og Amount ... Ja, de to kunne godt være unikke sammen, men mon ikke også der er et UserId ... så kan man godt undvære en identity column.
( Og hvis jeg har skrevet noget vrøvl nu igen, så giver jeg mig selv skylden og kommer nok med endnu en Dohhh" )
Når jeg bruger din kode ser det ud som det skal. Men jeg ville gerne have Amount i første kolonne og ikke Id'erne fra depositnummer.
SELECT D.Id, COUNT(U.DepositID) AS Antal FROM Depositnummer D LEFT JOIN Udlån U ON D.Id = U.DepositId GROUP BY D.Id
Sådn her: SELECT D.Amount, COUNT(U.DepositID) AS Antal FROM Depositnummer D
Men så får jeg følegende fejl: Column 'D.Amount' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Hvis Amount ikke er det sammme, så kan du ikke. Hvis, så kan du lave en GROUP BY på den colomn også, men det giver ikke rigtig nogen mening, da "Amount" allerede burde være i din Udlån.
Du kan lave en SUM(column) så vil du få summen.
Du må forklare hvad du vil, så kan det sikkert lade sig gøre. Det virker dog mere som om du vil have dem enlektvis og derfor hører det ikke til i databasen, da det så mere er Business Logic.
Hvis alle beløb burde samme det samme så ville jeg bruge group by og select den kolonne, så vil du automatisk finde fejl da du så får et forkert resultat ud.
Udover det så ville jeg nok flytte amount over i den anden table, da der jo ikke er noget der lige nu forhindre dig i at skrive forkerte ting ind i den deposit tabel.
Nu er det ikke til at vide, hvilken forretningsmodel, der ligger bag.
Men der er et problem, hvis prisen for et depositum kan ændre sig over tid. Hvis depositum af type 1 ændres fra 100 kr til 110 kr, vil det i den beskrevne model betyde, at kunder der betalte 100 kr nu vil få 110 kr tilbage i deres depositum.
Så enten skal de 100 kr stå i udlåns-tabellen direkte (som vel nok er en almindelig og god forretningsskik), eller også skal man sørge for at en depositumstype kan sættes inaktiv. Så vil man være nødt til at lave et depositum af type 4 til 110 kr.
Det er svært/umuligt at rådgive om hvad spørgerens model skal være, når vi ikke ved hvad han er ved at lave.
Det der står på venstresiden i den LEFT JOIN, i min udgave, #9, bestemmer hvilken rækker der kommer, uanset indhold af deposit-tabellen. Så det er ligegyldigt om der er nogle deposits eller ej ;)
Der skal ikke være nogen tvivl her, jeg ville bruge GROUP BY. Jeg tror SQL serveren er bedre optimeret der. Den looper nok alligevel over duplicates rows og fjerner den når du kører din Argregate method.
#12 Jeg har lavet det sådan at hvis depositummet skal ændres ændre man dpositums id'et i udlånstabellen. Hvis det nye depositum ikke findes allerede oprettes der et nyt id i depositumstabellen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.