无法获得良好的查询

时间:2014-04-29 20:57:43

标签: sql

我正在尝试查询学校项目,但我无法弄清楚它是如何工作的。

我可能对内部联接做错了什么

这是我的问题。

我需要从每个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

请有人帮帮我吗

1 个答案:

答案 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