Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 server 将两个SQL Server查询联接到一个数据集中_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 将两个SQL Server查询联接到一个数据集中

Sql server 将两个SQL Server查询联接到一个数据集中,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有一个用户希望在报告中汇总数据。我能够使用两个单独的SQL查询获得正确的数据,如下所示 SELECT JH.ProjectID, SUM(EstProdHours) AS EstProdHrs, SUM(ActProdHours) AS ActProdHrs FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND JO.JobNum = JH.JobNum WHERE JH.ProjectID &

我有一个用户希望在报告中汇总数据。我能够使用两个单独的SQL查询获得正确的数据,如下所示

SELECT JH.ProjectID, SUM(EstProdHours) AS EstProdHrs, SUM(ActProdHours) 
AS ActProdHrs
FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND 
JO.JobNum = JH.JobNum WHERE JH.ProjectID <> ''
GROUP BY JH.ProjectID ORDER BY JH.ProjectID

SELECT JH.ProjectID, SUM(EstProdHours) + SUM(EstSetHours) AS Earned  
FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND 
JO.JobNum = JH.JobNum WHERE JH.ProjectID <> '' AND OpComplete = 1
GROUP BY JH.ProjectID ORDER BY JH.ProjectID
这两个单独的查询各自提供正确的数据。但是,我的目标是使用这两个查询的结果以及结果设置一个SQL视图,如下所示:

ProjectID   EstProdHrs  ActProdHrs   Earned
6000        480.00      1640.59      477
6001        621.00      2431.04      619
6002        6687.97     23234.23     6695.47
6003        414.97      4731.47      416.72
6004        208.00      2196.52      206.00
6005        2.00        76.77        NULL <--- This would show up if no completed ops in 2nd select statement
6006        20.83       819.29       18.83
我试图将这两个查询内部连接起来,但似乎无法避免错误的语法错误。声明如下:

SELECT * FROM

(SELECT JH.ProjectID, SUM(EstProdHours) AS EstProdHrs, SUM(ActProdHours) AS 
ActProdHrs,'N/A' AS ValueMissingTableB 

FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND 
JO.JobNum = JH.JobNum WHERE JH.ProjectID <> ''

) AS 1

INNER JOIN 

(SELECT JH2.ProjectID, SUM(EstProdHours) + SUM(EstSetHours) AS Earned

FROM JobOper AS JO2 INNER JOIN JobHead AS JH2 ON JO2.Company = JH2.Company 
AND JO2.JobNum = JH2.JobNum WHERE JH2.ProjectID <> '' AND OpComplete = 1

) AS 2

ON 1.ProjectID = 2.ProjectID

我还尝试了UNION和UNIONALL,但失败了,因为这两个查询的记录量不一样。我希望我在这里犯了一个新手错误,这是可以做到的。感谢您的帮助。

我没有您的表来测试这一点,但您不能只进行左连接

SELECT A.ProjectID,A.EstProdHrs, A.ActProdHrs, E.Earned
FROM (

        SELECT JH.ProjectID, SUM(EstProdHours) AS EstProdHrs, SUM(ActProdHours) AS ActProdHrs
        FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND 
        JO.JobNum = JH.JobNum WHERE JH.ProjectID <> ''
        GROUP BY JH.ProjectID 
) A
LEFT JOIN (
            SELECT JH.ProjectID, SUM(EstProdHours) + SUM(EstSetHours) AS Earned  
            FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND 
            JO.JobNum = JH.JobNum WHERE JH.ProjectID <> '' AND OpComplete = 1
            GROUP BY JH.ProjectID 
            ) E
        ON A.ProjectID=E.ProjectID
ORDER BY A.ProjectID
试试这个:

WITH A AS (SELECT JH.ProjectID, SUM(EstProdHours) AS EstProdHrs, SUM(ActProdHours) AS 
    ActProdHrs,'N/A' AS ValueMissingTableB 

    FROM JobOper AS JO INNER JOIN JobHead AS JH ON JO.Company = JH.Company AND 
    JO.JobNum = JH.JobNum WHERE JH.ProjectID <> ''
    GROUP BY JH.ProjectID ORDER BY JH.ProjectID
    ), 

     B AS 

    (SELECT JH2.ProjectID, SUM(EstProdHours) + SUM(EstSetHours) AS Earned

    FROM JobOper AS JO2 INNER JOIN JobHead AS JH2 ON JO2.Company = JH2.Company 
    AND JO2.JobNum = JH2.JobNum WHERE JH2.ProjectID <> '' AND OpComplete = 1
    GROUP BY JH2.ProjectID ORDER BY JH2.ProjectID
    ) 

    SELECT * FROM A
    JOIN B ON A.ProjectID = B.ProjectID

用左键代替谢谢Serge,这很有效。多谢各位。我甚至没有想到要尝试左连接。没问题-你说你是SQL新手-可能值得看看不同的连接类型,本页对它们进行了清楚的解释;詹姆斯的回答起了作用。我确实尝试了您的解决方案,但收到一个错误消息MSG 8120,级别16,状态1,第1行列“JobHead.ProjectID”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。很抱歉,我编辑了我的查询以添加GROUP BY,这可能是导致错误的原因,但如果不是,请确定