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。。。