Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法获得正确的查询_Sql - Fatal编程技术网

Sql 无法获得正确的查询

Sql 无法获得正确的查询,sql,Sql,我试图查询一个学校项目,但我不知道它是如何工作的 我可能是内部连接有问题 这是我的问题 我需要从每个opdracht获得材料成本和人工成本 我已经准备好了一个问题,一个是人工成本,一个是材料成本 人工成本查询: USE [Vakgarage De Haas] SELECT o.opdrachtnr, o.kenteken, k.achternaam, CAST((t.uurtarief * op.tijdsduur) AS decimal (10,2)) AS arbeidskosten

我试图查询一个学校项目,但我不知道它是如何工作的

我可能是内部连接有问题

这是我的问题

我需要从每个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
**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 * 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
使用[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**  **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
**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
有人能帮我吗?

试试使用工会

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

我尝试了不同的方法,但我得到了相同的结果,我看到了发生了什么。您是否尝试过简单地“联合”——将两个查询合并在一起?