Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvordan ser udtrækket ud? Og hvad er de faktiske tal? Umiddelbart synes jeg at det ser ok ud... Jeg ville skrive det på en lidt anden måde:
SELECT tk.id ,tk.firma ,tk.fornavn ,tk.efternavn ,SUM(tol.antal*tol.pris) AS materialer ,SUM(tt.timer*tt.timepris) AS timer FROM tblkunder AS tk INNER JOIN tblorders AS tod ON tk.id = tod.kundeid INNER JOIN tblorderlines AS tol ON tod.id = tol.ordreid INNER JOIN tbltimer AS tt ON tod.id = tt.ordreid GROUP BY tk.id ORDER BY tk.id ,materialer DESC
Jeg mener at have haft samme problem for nogle år siden. Problemet var der at det var fordi at jeg ville lave 2 summer i samme sql. Det kunne relationerne ikke finde ud af, derfor gik de ind og gangede med hinanden på kryds og tværs.
Der er en fin lille artikel om JOINs her: http://en.wikipedia.org/wiki/JOIN INNER er bare en anden måde for hvad du gjorde (jeg synes JOIN-syntaksen er pænere)
Det burde være nemt at debugge, prøv at se hvad denne query giver dig:
SELECT tk.id ,tk.firma ,tk.fornavn ,tk.efternavn ,tol.antal ,tol.pris ,tt.timer ,tt.timepris FROM tblkunder AS tk INNER JOIN tblorders AS tod ON tk.id = tod.kundeid INNER JOIN tblorderlines AS tol ON tod.id = tol.ordreid INNER JOIN tbltimer AS tt ON tod.id = tt.ordreid ORDER BY tk.id
Det giver 33337 poster og ser således ud: 1 Vand og Teknik Att. Kurt 2 0.00 5 0 1 Vand og Teknik Att. Kurt 2 0.00 5 0 1 Vand og Teknik Att. Kurt 2 0.00 5 0 1 Vand og Teknik Att. Kurt 1 0.00 5 0 1 Vand og Teknik Att. Kurt 2 0.00 5 0 osv osv og det kan godt passe der er nogle produkter der ikke er taget penge for
ja det synes jeg jeg er overbevist om at det er relationerne der skrudre mudre når der skal summeres 2 gange i samme sql. Men jeg har bare aldrig kunne gennemskue det selv.
SELECT tk.id ,tk.firma ,tk.fornavn ,tk.efternavn ,SUM(tol.antal)*tol.pris AS materialer ,SUM(tt.timer)*tt.timepris AS timer FROM tblkunder AS tk INNER JOIN tblorders AS tod ON tk.id = tod.kundeid INNER JOIN tblorderlines AS tol ON tod.id = tol.ordreid INNER JOIN tbltimer AS tt ON tod.id = tt.ordreid GROUP BY tk.id ORDER BY materialer DESC
SELECT tk.id ,tk.firma ,tk.fornavn ,tk.efternavn ,SUM(tol.antal*tol.pris) AS materialer ,SUM(tt.timer*tt.timepris) AS timer FROM tblkunder AS tk INNER JOIN tblorders AS tod ON tk.id = tod.kundeid INNER JOIN tblorderlines AS tol ON tod.id = tol.ordreid INNER JOIN tbltimer AS tt ON tod.id = tt.ordreid GROUP BY tk.id ,tol.orderid ORDER BY materialer DESC
hvis ikke det virker, så prøv:
SELECT tk.id ,tk.firma ,tk.fornavn ,tk.efternavn ,SUM(tol.antal*tol.pris) AS materialer ,SUM(tt.timer*tt.timepris) AS timer FROM tblkunder AS tk INNER JOIN tblorders AS tod ON tk.id = tod.kundeid INNER JOIN tblorderlines AS tol ON tod.id = tol.ordreid INNER JOIN tbltimer AS tt ON tod.id = tt.ordreid GROUP BY tk.id ,tol.orderid ,tt.orderid ORDER BY materialer DESC
Den første virker ikke da den finder samme kunde flere gange med høje tal:( Den anden finder også samme kunde flere gange med svimlende høje tal :( Jeg har også forsøgt med flere forskellige kombinationer af group uden held
coder -> mange tak for dit forsøg på at løse det. Desværre måtte jeg lave 2 seperate udtræk...
Synes godt om
Ny brugerNybegynder
Din løsning...
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.