Summera

Databaser & SQL

3 svar · 622 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Trådstart#1

Hej! :)

Jag har följande fråga;

SELECT t.[Id] AS TaskId, t.TaskNr, 
	ti.[Id] AS TimeId, ti.InvoiceTime, ti.[Price] AS TimePrice,  
	m.[Id] As MaterialId, m.InvoiceAmount, m.[Price] AS MaterialPrice
		FROM tblTask t
	INNER JOIN tblTime ti
		ON ti.[OwnerId] = t.[Id] AND ti.[OwnerType] = 2
	INNER JOIN tblMaterial m
		ON m.[OwnerId] = t.[Id] AND m.[OwnerType] = 2
WHERE t.[Id] = 10021

Som ger resultat enligt bifogad bild.

Det jag vill åstadkomma är att för varje tidrad beräkna delsumma:

ti.[InvoiceTime] * ti.[Price]

och för varje materialrad beräkna delsumma:

m.[InvoiceAmount] * m.[Price]

Detta skall sedan bli två stycken poster där allt summeras enligt

TotalTimeCost
TotalMaterialCost

Jag får det inte rktigt att lira, då alla posterna dupliceras och det blir alldeles för stora tal... (se bild) Hur gör man?

Mvh
Henrik

result.png
Medlem sedan jan. 20013 582 inlägg
#2

Testade lite med:

SELECT SUM(DISTINCT ti.InvoiceTime * ti.[Price]) + SUM(DISTINCT m.InvoiceAmount * m.[Price])AS TotalCost
		FROM tblTask t
	INNER JOIN tblTime ti
		ON ti.[OwnerId] = t.[Id] AND ti.[OwnerType] = 2
	INNER JOIN tblMaterial m
		ON m.[OwnerId] = t.[Id] AND m.[OwnerType] = 2
WHERE t.[Id] = 10021

Fungerade bara nästan...

Om det fanns flera tider med olika Id, men med samma antal timmar, så räknades inte den posten med... Inte så bra....

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#3
select dt.taskid
     , dt.tasknr
     , sum(dt.s)
  from
(
    SELECT t.[Id] AS TaskId
         , t.TaskNr
         , sum(ti.invoicetime * ti.price) as s
      FROM tblTask t
    INNER 
      JOIN tblTime ti
        ON ti.[OwnerId] = t.[Id] 
       AND ti.[OwnerType] = 2
     WHERE t.[Id] = 10021
    GROUP
        BY t.Id
         , t.TaskNr
    UNION ALL 
    SELECT t.[Id] AS TaskId
         , t.TaskNr
         , sum(m.invoiceamount * m.price) as s
      FROM tblTask t
    INNER 
      JOIN tblMaterial m
        ON m.[OwnerId] = t.[Id] 
       AND m.[OwnerType] = 2
     WHERE t.[Id] = 10021
    GROUP
        BY t.Id
         , t.TaskNr
) as dt
group
    by dt.taskid
     , dt.tasknr
Medlem sedan jan. 20013 582 inlägg
#4

:)

Fungerar perfekt!

Mvh
Henrik

251 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)