2017-08-09 20 views
0

我需要從另一個表中的字段的計數更新臨時表的列。我試圖用下面的查詢來做到這一點,但我得到一個語法錯誤。從組的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號線,附近關鍵字 '集團'(42000,156)

+2

你應該做的是更換一個明確的隱式連接的第一件事一。 第二件事是顯示完整的錯誤信息,並最好標記它指向的行。 –

回答

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

謝謝,它的工作,但JOIN(選擇...)變得太慢了。最後,我創建了一個臨時表,然後對整個表使用JOIN。速度非常快。 –

1

你不能直接更新使用聚合函數的語法不正確聲明。相反,你你可以派生表

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.. 
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