webForumDet fria alternativet

Tröttsam uträkning...

5 svar · 475 visningar · startad av CatZ

CatZMedlem sedan jan. 20022 440 inlägg
#1

Jag har en SP som jag inte lyckas få till som jag vill.

SELECT
	tblInvoice.InvoiceID, 
	tblInvoice.InvoiceNumber, 
	tblCustomers.Name AS Customer, 
	tblInvoice.EndDate, 
	dbo.LineTotal(tblInvoice.Km, tblInvoice.KmPrice, 0, tblInvoice.GST, 1) AS KMTotal, 
	SUM(dbo.LineTotal(tblProducts.Quantity, tblProducts.UnitPrice, 0, tblInvoice.GST, 1)) AS ProductTotal, 
	SUM(dbo.LineTotal(tblInvoiceDetails.Quantity, tblInvoice.HourPrice, 0, tblInvoice.GST, 1)) AS HourTotal
FROM 
	tblInvoice 
	LEFT OUTER JOIN tblProducts ON tblInvoice.InvoiceID = tblProducts.InvoiceID 
	LEFT OUTER JOIN tblInvoiceDetails ON tblInvoice.InvoiceID = tblInvoiceDetails.InvoiceID 
	INNER JOIN tblCustomers ON tblInvoice.CustomerID = tblCustomers.CustomerID
GROUP BY 
	tblInvoice.InvoiceID, 
	tblInvoice.InvoiceNumber, 
	tblCustomers.Name, 
	tblInvoice.EndDate, 
	dbo.LineTotal(tblInvoice.Km, tblInvoice.KmPrice, 0, tblInvoice.GST, 1)
ORDER BY 
	tblInvoice.InvoiceNumber DESC

Det går bra så länge jag bara har en rad i vardera av timmar och produkter så fort jag har två rader som knyts till en faktura så skrivs allting ut dubbelt. Vad gör jag för fel?

Om du kollar på bilderna kanske du förstår bättre vad jag försöker säga men inte hittar ord till ;)

problemet.pngproblemet2.png
LarsGMedlem sedan dec. 200012 464 inlägg
#2

Tillbaka till basen.

Ge exempel på datainnehåll och förväntat resultat.

CatZMedlem sedan jan. 20022 440 inlägg
#3

Detta får jag:

243	6	NULL	NULL	NULL
242	5	NULL	NULL	NULL
241	4	312,50	1000,00	1875,00
240	3	62,50	1,25	312,50
237	1	31,25	NULL	NULL

BoOch såhär vill jag att det ska bli:

243	6	NULL	NULL	NULL
242	5	NULL	NULL	NULL
241	4	312,50	500,00	625,00
240	3	62,50	1,25	312,50
237	1	31,25	NULL	NULL

Så fort jag har mer en två rader i svaret som jag försöker slå ihop så blir det dubbelt har jag 3 rader som jag har på invoiceid 241 där finns det 3 rader, en med 200 en med 100 och ytterligare en med 100. då blir det 1875 istället för 625. Så länge jag bara har en rad i respektive tabell så går det bra.

Några idéer?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Du får räkna ut de båda summorna var för sig och inte joina ihop allt.

CatZMedlem sedan jan. 20022 440 inlägg
#5

red.

Du menar att jag ska göra 3 olika SP av det hela och köra innifrån huvudfrågan något i stil med

declare @InvoiceID as int
declare @HourTotal as money
@InvoiceID = (select InvoiceID from tblInvoice)

execute spGetHourTotals @InvoiceID, @HourTotal output

Var det så du tänkte eller kan man göra på något bättre sätt?

CatZMedlem sedan jan. 20022 440 inlägg
#6
SELECT
	tblInvoice.InvoiceID, 
	myHourTotal.HourTotal
FROM 
	tblInvoice
	LEFT OUTER JOIN 
	(
		SELECT 
			tblInvoice.InvoiceID, 
			SUM(dbo.LineTotal(tblInvoiceDetails.Quantity, tblInvoice.HourPrice, 0, tblInvoice.GST, 1)) AS HourTotal
		FROM 
			tblInvoice
			LEFT OUTER JOIN tblInvoiceDetails ON tblInvoice.InvoiceID = tblInvoiceDetails.InvoiceID
		WHERE 
			(tblInvoiceDetails.InvoiceID = tblInvoice.InvoiceID)
		GROUP BY
			tblInvoice.InvoiceID
	) AS myHourTotal
	ON tblInvoice.InvoiceID = myHourTotal.InvoiceID
GROUP BY 
	tblInvoice.InvoiceID, 
	myHourTotal.HourTotal
ORDER BY 
	tblInvoice.InvoiceID DESC

Jag kom på vad du menade LarsG, tack för sparken i rätt rumpa höll jag på att skriva men riktning menar jag! ;)

128 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)