时间:2017-08-09 16:00:10

标签: sql sql-server

我需要从另一个表中的字段计数更新临时表的列。我试图使用以下查询执行此操作,但我收到语法错误。

我该如何撰写此查询?

谢谢!

UPDATE #ResultadosTest
SET PalletsReservados = COUNT(pe.paen_numero)
FROM #ResultadosTest RT, dba.spro_palletencab pe
WHERE pe.pate_tempor = RT.pate_tempor
  AND pe.expo_codigo = RT.expo_codigo
  AND pe.WeekLinId = RT.WeekLinId
  AND pe.plde_codigo = RT.plde_codigo
  AND pe.paen_estado = 1 
  AND ISNULL(pe.LoteCargaId, 0) <> 0 
  AND ISNULL(pe.PREMOPID, 0) <> 0 
GROUP BY 
    pe.pate_tempor, pe.expo_codigo, pe.WeekLinId, pe.plde_codigo

错误是:

  

第10行,关键字&#39; GROUP&#39;附近的语法不正确(42000,156)

3 个答案:

答案 0 :(得分:1)

您无法在update语句中直接使用聚合函数。相反,你可以得到一个派生表

Update #ResultadosTest
SET PalletsReservados = ppp.countpaen_numero
From (Select Count(pe.paen_numero) as countpaen_numero ,pe.pate_tempor,spro_palletencab,........
FROM #ResultadosTest RT,dba.spro_palletencab pe
Where pe.pate_tempor=RT.pate_tempor
AND pe.expo_codigo=RT.expo_codigo
AND pe.WeekLinId=RT.WeekLinId
AND pe.plde_codigo=RT.plde_codigo
AND pe.paen_estado=1 AND IsNull(pe.LoteCargaId,0)<>0 AND     IsNull(pe.PREMOPID,0)<>0 
GROUP BY pe.pate_tempor,pe.expo_codigo,pe.WeekLinId,pe.plde_codigo ) ppp
Where ppp.pate_tempor = Field.. 

答案 1 :(得分:0)

第一组,然后加入

Update #ResultadosTest
SET PalletsReservados = pe.Cnt
FROM #ResultadosTest RT
JOIN (
    SELECT pate_tempor, expo_codigo, WeekLinId, plde_codigo, Count(pe.paen_numero) cnt
    FROM dba.spro_palletencab pe
    WHERE paen_estado=1 AND IsNull(LoteCargaId,0)<>0 AND IsNull(PREMOPID,0)<>0
    GROUP BY pate_tempor,expo_codigo,WeekLinId,plde_codigo
) pe ON pe.pate_tempor=RT.pate_tempor
AND pe.expo_codigo=RT.expo_codigo
AND pe.WeekLinId=RT.WeekLinId
AND pe.plde_codigo=RT.plde_codigo;

答案 2 :(得分:0)

应该像:

    UPDATE RT
       SET PalletsReservados = pe.ctr
      FROM #ResultadosTest RT
INNER JOIN 
         (
            SELECT pate_tempor
                  ,expo_codigo
                  ,WeekLinId
                  ,plde_codigo
                  ,Count(pe.paen_numero) as ctr
              FROM dba.spro_palletencab 
             WHERE paen_estado            = 1
               AND ISNULL(LoteCargaId,0) <> 0
               AND ISNULL(PREMOPID,0)    <> 0 
             GROUP BY pe.pate_tempor
                     ,pe.expo_codigo
                     ,pe.WeekLinId
                     ,pe.plde_codigo               
         ) pe
        ON pe.pate_tempor   = RT.pate_tempor
       AND pe.expo_codigo   = RT.expo_codigo
       AND pe.WeekLinId     = RT.WeekLinId
       AND pe.plde_codigo   = RT.plde_codigo