Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 ISNULL语法挑战_Sql_Sql Server - Fatal编程技术网

Sql ISNULL语法挑战

Sql ISNULL语法挑战,sql,sql-server,Sql,Sql Server,我似乎无法理解这里的语法问题 它可以工作,但返回空值 SELECT jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs, (SELECT SUM(jot.Act_Run_Hrs) FROM PRODUCTION.dbo.Job_Operation_Time jot WHERE jot.Job_Operation = jo.Job_Operation) AS Cos

我似乎无法理解这里的语法问题

它可以工作,但返回空值

SELECT jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs,
    (SELECT SUM(jot.Act_Run_Hrs)
    FROM PRODUCTION.dbo.Job_Operation_Time jot
    WHERE jot.Job_Operation = jo.Job_Operation) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
WHERE jo.Job = 'A5076027'
所以我尝试在这里使用ISNULL,但我得到一个错误:

SELECT jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs,
    (ISNULL(SELECT SUM(jot.Act_Run_Hrs)
    FROM PRODUCTION.dbo.Job_Operation_Time jot
    WHERE jot.Job_Operation = jo.Job_Operation,0)) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
WHERE jo.Job = 'A5076027'
错误是: Msg 156,第15级,状态1,第2行 关键字“SELECT”附近的语法不正确。 Msg 102,15级,状态1,第4行 “,”附近的语法不正确

有人能看到我遗漏了什么吗

谢谢

试试这个:

SELECT jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs,
    ISNULL((SELECT SUM(jot.Act_Run_Hrs)
    FROM PRODUCTION.dbo.Job_Operation_Time jot
    WHERE jot.Job_Operation = jo.Job_Operation),0) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
WHERE jo.Job = 'A5076027'
试试这个:

SELECT jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs,
    ISNULL((SELECT SUM(jot.Act_Run_Hrs)
    FROM PRODUCTION.dbo.Job_Operation_Time jot
    WHERE jot.Job_Operation = jo.Job_Operation),0) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
WHERE jo.Job = 'A5076027'

我认为这里不需要相关子查询。在我看来,标准的左连接就是所需的全部

SELECT jo.Job_Operation
    , jo.Job
    , jo.Work_Center
    , jo.Operation_Service
    , jo.Est_Total_Hrs
    , SUM(isnull(jot.Act_Run_Hrs, 0)) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
left join PRODUCTION.dbo.Job_Operation_Time jot ON jot.Job_Operation = jo.Job_Operation
WHERE jo.Job = 'A5076027'
GROUP BY
    jo.Job_Operation
    , jo.Job
    , jo.Work_Center
    , jo.Operation_Service
    , jo.Est_Total_Hrs

我认为这里不需要相关子查询。在我看来,标准的左连接就是所需的全部

SELECT jo.Job_Operation
    , jo.Job
    , jo.Work_Center
    , jo.Operation_Service
    , jo.Est_Total_Hrs
    , SUM(isnull(jot.Act_Run_Hrs, 0)) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
left join PRODUCTION.dbo.Job_Operation_Time jot ON jot.Job_Operation = jo.Job_Operation
WHERE jo.Job = 'A5076027'
GROUP BY
    jo.Job_Operation
    , jo.Job
    , jo.Work_Center
    , jo.Operation_Service
    , jo.Est_Total_Hrs

在我看来,这要清楚得多

SELECT
   jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs
   ,ISNULL(jot.[SumAct_Run_Hrs],0) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
LEFT JOIN (
    SELECT Job_Operation,SUM(Act_Run_Hrs) [SumAct_Run_Hrs]
    FROM PRODUCTION.dbo.Job_Operation_Time
    GROUP BY Job_Operation
) jot ON jot.Job_Operation = jo.Job_Operation
WHERE jo.Job = 'A5076027'

在我看来,这要清楚得多

SELECT
   jo.Job_Operation, jo.Job, jo.Work_Center, jo.Operation_Service, jo.Est_Total_Hrs
   ,ISNULL(jot.[SumAct_Run_Hrs],0) AS Cost
FROM PRODUCTION.dbo.Job_Operation jo
LEFT JOIN (
    SELECT Job_Operation,SUM(Act_Run_Hrs) [SumAct_Run_Hrs]
    FROM PRODUCTION.dbo.Job_Operation_Time
    GROUP BY Job_Operation
) jot ON jot.Job_Operation = jo.Job_Operation
WHERE jo.Job = 'A5076027'


如果可以避免,请不要在子查询选择中执行联接。在您的情况下,将查询转换为使用常规联接,然后对其使用
ISNULL
@Adam Silenko的答案应该可以。在这里使用相关子查询很好(尽管有些人会使用
apply
)。如果使用子查询作为参数,则必须将其放在括号中。每当在这样的查询中出现错误时,请仔细查看开括号和闭括号。如果可以避免,请不要在子查询中进行连接。在您的情况下,将查询转换为使用常规联接,然后对其使用
ISNULL
@Adam Silenko的答案应该可以。在这里使用相关子查询是可以的(尽管有些人会使用
apply
)。如果使用子查询作为参数,则必须将其放在括号中。每当在这样的查询中出现错误时,请仔细查看开括号和闭括号。谢谢@AdamSilenko.)我认为sum永远不会回来null@BrianWhite这是正确的,但这不会影响任何事情。许多人更愿意看到它“以防万一”。)啊,当没有值时,它不会返回null,但是如果没有行,它会返回null。得到了它@AdamSilenko.)我认为sum永远不会回来null@BrianWhite这是正确的,但这不会影响任何事情。许多人更愿意看到它“以防万一”。)啊,当没有值时,它不会返回null,但是如果没有行,它会返回null。Got itSum从不返回null,如果没有
not null
值,它只返回0 I thoughtsum返回null,因为所有聚合函数都忽略null,而且子查询也可以返回null…Sum从不返回null,如果没有
not null
值,它只返回0 I thoughtsum返回null,因为所有聚合函数都忽略null,所以子查询也可以返回null。。。