webForumDet fria alternativet

Summera

Databaser & SQL

3 svar · 608 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#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

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)