sql - 使用 Join 和 Group By 更新语句

标签 sql sql-server-2008 join group-by update-statement

我写了下面的更新语句,但它显示了诸如“关键字'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

Select 不是 Update,而是适用于上述 Query。会出现什么问题以及如何根据 Join 和 Group By 子句编写查询。

最佳答案

您可以尝试将组放入子查询中,然后按“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

关于sql - 使用 Join 和 Group By 更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12225715/

相关文章:

sql - 查询时间过长

sql-server - 如何选择 X 随机行,同时保证 Y 某些特定行出现在结果中?

mysql - SQL - 嵌套连接

Linux 连接实用程序提示输入文件未排序

c# - 在 sqldatasource 中读取 sql 模式

mysql - 加入主表中时间之前的最新记录

sql - 数组联合作为聚合函数

mysql - 计算第一个结果和最后一个结果之间的差异

java - 使用准备好的语句插入单行

xml - SQL Server XML 存在()