我正在尝试查询学校项目,但我无法弄清楚它是如何工作的。
我可能对内部联接做错了什么
这是我的问题。
我需要从每个opdracht获得材料成本和人工成本
我已准备好查询劳动力成本和材料成本
人工成本查询:
USE [Vakgarage De Haas]
SELECT o.opdrachtnr, o.kenteken, k.achternaam, CAST((t.uurtarief * op.tijdsduur) AS decimal (10,2)) AS arbeidskosten
FROM OpdrachtTaak op
INNER JOIN Taak t
ON op.taaknr = t.taaknr
INNER JOIN Opdracht o
ON op.opdrachtnr = o.opdrachtnr
INNER JOIN auto a
ON o.kenteken = a.kenteken
INNER JOIN klant k
ON a.klantnr = k.klantnr
GROUP BY o.opdrachtnr, o.kenteken, k.achternaam, op.tijdsduur,t.uurtarief
结果:
**opdrachtnr** **kenteken** **achternaam** **arbeidskosten**
1 12-JS-PP Pieterse 20.00
1 12-JS-PP Pieterse 35.00
2 PP-AD-01 Boer 6.00
3 ZK-PL-42 Boer NULL
材料成本查询:
USE [Vakgarage De Haas]
SELECT o.opdrachtnr, o.kenteken, k.achternaam, (art.prijs * oa.aantal) AS Materiaalkosten
FROM OpdrachtArtikel oa
INNER JOIN Artikel art
ON oa.artikelnr = art.artikelnr
INNER JOIN Opdracht o
ON oa.opdrachtnr = o.opdrachtnr
INNER JOIN auto a
ON o.kenteken = a.kenteken
INNER JOIN klant k
ON a.klantnr = k.klantnr
GROUP BY o.opdrachtnr, o.kenteken, k.achternaam, art.prijs, oa.aantal
结果:
**opdrachtnr kenteken achternaam Materiaalkosten**
1 12-JS-PP Pieterse 60.00
1 12-JS-PP Pieterse 110.00
2 PP-AD-01 Boer 12.00
3 ZK-PL-42 Boer 220.00
但是当我尝试将两个查询结合起来时 使用此查询:
USE [Vakgarage De Haas]
SELECT o.opdrachtnr, o.kenteken, k.achternaam, CAST((t.uurtarief * ot.tijdsduur) AS decimal (10,2)) AS arbeidskosten, (art.prijs * oa.aantal) AS Materiaalkosten
FROM Opdracht o
INNER JOIN OpdrachtTaak ot
ON o.opdrachtnr = ot.opdrachtnr
INNER JOIN Taak t
ON ot.taaknr = t.taaknr
INNER JOIN OpdrachtArtikel oa
ON o.opdrachtnr = oa.opdrachtnr AND ot.opdrachtnr = oa.opdrachtnr
INNER JOIN Artikel art
ON oa.artikelnr = art.artikelnr
INNER JOIN Auto a
ON o.kenteken = a.kenteken
INNER JOIN Klant k
ON a.klantnr = k.klantnr
GROUP BY o.opdrachtnr, o.kenteken, t.uurtarief, ot.tijdsduur, art.prijs, oa.aantal, k.achternaam
这是我得到的结果:
opdrachtnr kenteken achternaam arbeidskosten Materiaalkosten
1 12-JS-PP Pieterse 35.00 60.00
1 12-JS-PP Pieterse 35.00 110.00
1 12-JS-PP Pieterse 20.00 60.00
1 12-JS-PP Pieterse 20.00 110.00
2 PP-AD-01 Boer 6.00 12.00
3 ZK-PL-42 Boer NULL 220.00
我想要的结果是:
opdrachtnr kenteken achternaam arbeidskosten Materiaalkosten
1 12-JS-PP Pieterse 20.00 60.00
1 12-JS-PP Pieterse 35.00 110.00
2 PP-AD-01 Boer 6.00 12.00
3 ZK-PL-42 Boer NULL 220.00
请有人帮帮我吗
答案 0 :(得分:0)
尝试使用联盟。
SELECT *
FROM
(
SELECT o.opdrachtnr, o.kenteken, k.achternaam, CAST((t.uurtarief * op.tijdsduur) AS decimal (10,2)) AS Materiaalkosten
FROM OpdrachtTaak op
INNER JOIN Taak t
ON op.taaknr = t.taaknr
INNER JOIN Opdracht o
ON op.opdrachtnr = o.opdrachtnr
INNER JOIN auto a
ON o.kenteken = a.kenteken
INNER JOIN klant k
ON a.klantnr = k.klantnr
GROUP BY o.opdrachtnr, o.kenteken, k.achternaam, op.tijdsduur,t.uurtarief
UNION
SELECT o.opdrachtnr, o.kenteken, k.achternaam, (art.prijs * oa.aantal) AS Materiaalkosten
FROM OpdrachtArtikel oa
INNER JOIN Artikel art
ON oa.artikelnr = art.artikelnr
INNER JOIN Opdracht o
ON oa.opdrachtnr = o.opdrachtnr
INNER JOIN auto a
ON o.kenteken = a.kenteken
INNER JOIN klant k
ON a.klantnr = k.klantnr
GROUP BY o.opdrachtnr, o.kenteken, k.achternaam, art.prijs, oa.aantal
) tmp