2012-09-01 12 views
10

以下の更新ステートメントを書いていますが、「キーワード 'GROUP'の近くに構文が正しくありません」などのエラーが表示されます。結合とグループを使用した更新ステートメント

UPDATE 
     J 
SET 
     J.StatusID = CASE WHEN SUM(DUV.VendorDUQuantity) = SUM(RD.InvoiceQuantity) THEN 1 ELSE J.StatusID END 
FROM 
     PLN_DU_Vendor DUV 
    INNER JOIN ENG_Release R ON R.ReleaseID = DUV.ReleaseID 
    INNER JOIN ENG_DU_Header H ON H.ReleaseID = R.ReleaseID AND DUV.DUID = H.DUID 
    INNER JOIN MKT_JobOrder J ON J.JobOrderID = R.JobOrderID 
    INNER JOIN MKT_CustomerOrder CO ON CO.OrderID = J.OrderID 
    LEFT JOIN PMT_RFDHeader RH ON RH.JobOrderID = J.JobOrderID 
    LEFT JOIN PMT_RFDDetail RD ON RD.RFDID = RH.RFDID AND RD.DUID = DUV.DUID     
WHERE 
     CO.OrderID = 100 
GROUP BY 
     J.JobOrderID 

Updateの代わりに、Selectは上記のクエリに対して完全に機能しています。問題とはどのようなものか、JoinとGroup By節に基づいてクエリを書く方法。

答えて

18

あなたはこのように、「JobOrderID」で参加し、その後、サブクエリの内部でグループを入れてみてくださいすることができます

UPDATE J 
SET J.StatusID = A.statusId 
FROM MKT_JobOrder J 
INNER JOIN (
    SELECT J.JobOrderID 
     , CASE 
      WHEN SUM(DUV.VendorDUQuantity) = SUM(RD.InvoiceQuantity) 
       THEN 1 
      ELSE J.StatusID 
      END AS statusId 
    FROM PLN_DU_Vendor DUV 
    INNER JOIN ENG_Release R ON R.ReleaseID = DUV.ReleaseID 
    INNER JOIN ENG_DU_Header H ON H.ReleaseID = R.ReleaseID 
           AND DUV.DUID = H.DUID 
    INNER JOIN MKT_JobOrder J ON J.JobOrderID = R.JobOrderID 
    INNER JOIN MKT_CustomerOrder CO ON CO.OrderID = J.OrderID 
    LEFT JOIN PMT_RFDHeader RH ON RH.JobOrderID = J.JobOrderID 
    LEFT JOIN PMT_RFDDetail RD ON RD.RFDID = RH.RFDID 
           AND RD.DUID = DUV.DUID 
    WHERE CO.OrderID = 100 
    GROUP BY J.JobOrderID 
      , J.StatusID 
    ) A ON J.JobOrderID = A.JobOrderID 
+0

ありがとうございます。私もStatusIDに基づいてグループ化する必要があります... – thevan

+0

私は私の答えを編集しました。がんばろう :) – hgulyan

3

ユーザーサブクエリの代わりにこの操作を実行する

UPDATE 
    J 
SET StatusID = x.Status 
    FROM 
    (select CASE WHEN SUM(DUV.VendorDUQuantity) = SUM(RD.InvoiceQuantity) THEN 1 
    ELSE J.StatusID END as Status 
    JobOrderID 
    FROM 
    PLN_DU_Vendor DUV 
    INNER JOIN ENG_Release R ON R.ReleaseID = DUV.ReleaseID 
    INNER JOIN ENG_DU_Header H ON H.ReleaseID = R.ReleaseID AND DUV.DUID = H.DUID 
INNER JOIN MKT_JobOrder J ON J.JobOrderID = R.JobOrderID 
INNER JOIN MKT_CustomerOrder CO ON CO.OrderID = J.OrderID 
LEFT JOIN PMT_RFDHeader RH ON RH.JobOrderID = J.JobOrderID 
LEFT JOIN PMT_RFDDetail RD ON RD.RFDID = RH.RFDID AND RD.DUID = DUV.DUID     
WHERE 
    CO.OrderID = 100 
GROUP BY 
    J.JobOrderID) X 
INNER JOIN MKT_JobOrder J On x.JobOrderID = J.JobOrderID 
+0

あなたのクエリ動作しません。 2つのJobOrderId列があります。どちらを使用するかを指定する必要があります。 – hgulyan

関連する問題