webForumDet fria alternativet

Summera

3 svar · 608 visningar · startad av devotion

devotionMedlem sedan jan. 20012 711 inlägg
#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
devotionMedlem sedan jan. 20012 711 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

Peter SMedlem sedan dec. 20025 484 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
devotionMedlem sedan jan. 20012 711 inlägg
#4

:)

Fungerar perfekt!

Mvh
Henrik

Genererad på 375 ms · cache AV · v20260730165559-full.f96bc7eb