2016-04-06 3 views
1

ここでは構文の問題を理解できないようです。ISNULLシンタックスチャレンジ

これは機能しますが、nullを返します。

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' 

エラーは次のとおりです。 メッセージ156、レベル15、状態1、ニアライン2 正しくない構文キーワード 'SELECT'。 メッセージ102、レベル15、状態1、行4 '、'の近くの構文が正しくありません。

私はここで何が欠けているのを誰も見ることができますか?

ありがとうございます!

+1

にはるかに読みやすいですあなたはそれを避けることができれば、サブクエリ選択に参加します。あなたの場合は、通常の結合を使用するようにクエリを変換し、その代わりに 'ISNULL'を使用します。 –

+0

「ISNULL」の2番目のパラメータは、括弧内の1つのレベルがネストされています。 @Adam Silenkoの答えはうまくいくはずです – WillardSolutions

+0

相関サブクエリの使用はここではうまくいきます(代わりに 'apply'を使用するものもあります)。 –

答えて

2

はこれを試してみてください。

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' 
+0

Sumはnullを返さず、単に0を返します。 –

+0

sumは、「not null」値がない場合はnullを返します。すべての集計関数はnullを無視するため、sum(https://msdn.microsoft.com/pl- pl/library/ms187810%28v = sql.110%29.aspx)、サブクエリもNULLを返すことができます... –

2

私はあなたがここに相関サブクエリを必要としないと思います。これは標準的な左結合が必要なすべてであるように思えます。

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 
+1

グループを追加... –

+0

ありがとう@AdamSilenko。 :) –

+0

合計がnullを返すとは思わない –

2

これはしないでください、私の意見

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'