使用子查询时应当注意的

在一个查询中:

UPDATE a
SET a.scts = b.v1, a.YCYL = b.v2, a.YCSL = b.v3
FROM kfdbsyy a,
          (SELECT f_wellnumber, COUNT(*) AS v1, SUM(f_fule) AS v2,
               SUM(f_totalliquid - f_fule) AS v3
         FROM (SELECT *
                 FROM CY_WELLRECORD
                 WHERE f_reporttime LIKE '2004-06%') 
         GROUP BY f_wellnumber
) b
WHERE a.JH = b.f_wellnumber AND a.ny = '200406'

红色在子查询单独运行没有问题,但整个运行,老是报告group附近有错。反复试验,发现跟内部的子查询有关。改为
UPDATE a
SET a.scts = b.v1, a.YCYL = b.v2, a.YCSL = b.v3
FROM kfdbsyy a,
          (SELECT f_wellnumber, COUNT(*) AS v1, SUM(f_fule) AS v2,
               SUM(f_totalliquid - f_fule) AS v3
         FROM (SELECT *
                 FROM CY_WELLRECORD
                 WHERE f_reporttime LIKE '2004-06%')  as c
         GROUP BY c.f_wellnumber) b
WHERE a.JH = b.f_wellnumber AND a.ny = '200406'
或者
UPDATE a
SET a.scts = b.v1, a.YCYL = b.v2, a.YCSL = b.v3
FROM kfdbsyy a,
          (SELECT f_wellnumber, COUNT(*) AS v1, SUM(f_fule) AS v2,
               SUM(f_totalliquid - f_fule) AS v3
         FROM (SELECT *
                 FROM CY_WELLRECORD
                 WHERE f_reporttime LIKE '2004-06%') DERIVEDTBL
         GROUP BY f_wellnumber) b
WHERE a.JH = b.f_wellnumber AND a.ny = '200406'

均可。
原文地址:https://www.cnblogs.com/jetz/p/247595.html