devotionMedlem sedan jan. 20012 711 inlägg
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
devotionMedlem sedan jan. 20012 711 inlägg
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
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
:)
Fungerar perfekt!
Mvh
Henrik