SQL查询在SQL Server 2014上工作但在2008 R2上没有

时间:2015-06-08 17:04:15

标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2014

以下查询在SQL Server 2014上运行正常,但在SQL Server 2008上返回以下错误:

Mens. 102, Nivel 15, Estado 1, Línea 1
Incorrect syntax near '='.
Mens. 156, Nivel 15, Estado 1, Línea 4
Incorrect syntax near the keyword 'AS'.
Mens. 156, Nivel 15, Estado 1, Línea 7
Incorrect syntax near the keyword 'AS'.

这是查询(有点长,抱歉):

SELECT per_agrup.COEMPRESA AS 'Empresa',
       per_agrup.DCCENTROS AS 'Centre',
       per_agrup.DCDIVISIONES AS 'Divisió',
       per_agrup.DCGRUPPROF AS 'Grup professional',
       per_agrup.DCUNIPROD AS 'Direcció/Àrea',
       per_agrup.DCPUESTOTRABAJO AS 'Lloc de treball',
       per_agrup.DCCATEGORIA AS 'Categoria',
       per_agrup.DCINCIDENCIA AS 'Motiu',
       Sum(IIf(per_agrup.COMPERSONAL=1 
               And per_agrup.COCOBERTURA Is Not Null,
               IIf(per_cober_agrup.COCOBERTURA Is Not Null And per_cober_agrup.COMPERSONAL=1,Round(per_cober_agrup.SumaDeHORAS/60.00,2),
               IIf(per_cober_agrup.COCOBERTURA Is Null,Round(per_agrup.SumaDeHORAS/60.00,2),0)),Round(per_agrup.SumaDeHORAS/60.00,2))) AS HORES 
FROM ( SELECT TENPLANING_PER.COEMPRESA,
       TENPLANING_PER.COIDENNUMERO,
       TENPLANING_PER.FECHAJORNADA,
       TENPLANING_PER.COPUESTOTRABAJO,
       TENPLANING_PER.COTIPOMOV,
       TENPLANITIPOINCIDEN.DCINCIDENCIA,
       TENPLANITIPOINCIDEN.COMPERSONAL,
       TENPLANING_PER.COCOBERTURA,
       DCPUESTOTRABAJO,
       DCDIVISIONES,
       DCGRUPPROF,
       DCUNIPROD,
       DCCATEGORIA,
       DCCENTROS, 
       Sum(TENPLANING_PER.HORAS) AS SumaDeHORAS   
FROM TENPLANITIPOINCIDEN 
INNER JOIN TENPLANING_PER ON (TENPLANITIPOINCIDEN.COINCIDENCIA = TENPLANING_PER.COTIPOMOV) 
AND (TENPLANITIPOINCIDEN.COEMPRESA = TENPLANING_PER.COEMPRESA)
JOIN TPUESTOTRABAJO ON TPUESTOTRABAJO.COEMPRESA=TENPLANING_PER.COEMPRESA 
AND TENPLANING_PER.COPUESTOTRABAJO=TPUESTOTRABAJO.COPUESTOTRABAJO 
JOIN TUNIPROD ON TENPLANING_PER.COEMPRESA=TUNIPROD.COEMPRESA 
AND TUNIPROD.COUNIPROD=TPUESTOTRABAJO.COPTUNIDPRO 
JOIN TDIVISIONES ON TDIVISIONES.COEMPRESA=TUNIPROD.COEMPRESA 
AND TDIVISIONES.CODIVISIONES=TUNIPROD.CODIVISION 
JOIN TCATEGORIAS ON TCATEGORIAS.COEMPRESA=TPUESTOTRABAJO.COEMPRESA 
AND TCATEGORIAS.COCATEGORIA=TPUESTOTRABAJO.COPTCATEGORIA 
JOIN TGRUPPROF ON TENPLANING_PER.COEMPRESA=TGRUPPROF.COEMPRESA 
AND TGRUPPROF.COGRUPPROF=TCATEGORIAS.COGRUPPROF 
JOIN TCENTROS ON TUNIPROD.COEMPRESA=TCENTROS.COEMPRESA 
AND TUNIPROD.COCENTRO=TCENTROS.COCENTROS 
GROUP BY TENPLANING_PER.COEMPRESA,
         TENPLANING_PER.COIDENNUMERO,
         TENPLANING_PER.FECHAJORNADA, 
         TENPLANING_PER.COPUESTOTRABAJO, 
         TENPLANING_PER.COTIPOMOV, 
         TENPLANITIPOINCIDEN.DCINCIDENCIA, 
         TENPLANITIPOINCIDEN.COMPERSONAL,
         TENPLANING_PER.COCOBERTURA,
         DCPUESTOTRABAJO,
         DCDIVISIONES,
         DCGRUPPROF,
         DCUNIPROD,
         DCCATEGORIA,
         DCCENTROS ) AS per_agrup
LEFT JOIN ( SELECT TENPLANING_PER_COBER.COEMPRESA,
                   TENPLANING_PER_COBER.COIDENNUMERO,                                                                                                                                                                                         
                   TENPLANING_PER_COBER.COCOBERTURA,
                   TENPLANING_PER_COBER.FECHAJORNADA,                        
                   TENPLANING_PER_COBER.COTIPOMOV,
                   TENPLANITIPOINCIDEN.DCINCIDENCIA,
                   TENPLANITIPOINCIDEN.COMPERSONAL,                        
                   TENPLANING_PER_COBER.COPUESTOTRABAJO,                        
                   Sum(TENPLANING_PER_COBER.HORAS) AS SumaDeHORAS
            FROM TENPLANITIPOINCIDEN 
            INNER JOIN TENPLANING_PER_COBER ON (TENPLANITIPOINCIDEN.COINCIDENCIA = TENPLANING_PER_COBER.COTIPOMOV) AND (TENPLANITIPOINCIDEN.COEMPRESA = TENPLANING_PER_COBER.COEMPRESA) 
            GROUP BY TENPLANING_PER_COBER.COEMPRESA, 
                     TENPLANING_PER_COBER.COIDENNUMERO,
                     TENPLANING_PER_COBER.COCOBERTURA,
                     TENPLANING_PER_COBER.FECHAJORNADA,
                     TENPLANING_PER_COBER.COTIPOMOV,
                     TENPLANITIPOINCIDEN.DCINCIDENCIA,
                     TENPLANITIPOINCIDEN.COMPERSONAL,
                     TENPLANING_PER_COBER.COPUESTOTRABAJO ) AS per_cober_agrup ON per_agrup.COEMPRESA = per_cober_agrup.COEMPRESA
AND per_agrup.COIDENNUMERO = per_cober_agrup.COIDENNUMERO
AND per_agrup.FECHAJORNADA = per_cober_agrup.FECHAJORNADA 
AND per_agrup.COCOBERTURA = per_cober_agrup.COCOBERTURA
GROUP BY per_agrup.COEMPRESA,
         per_agrup.DCCENTROS,
         per_agrup.DCDIVISIONES,
         per_agrup.DCGRUPPROF,
         per_agrup.DCUNIPROD,
         per_agrup.COTIPOMOV,
         per_agrup.DCINCIDENCIA,
         per_agrup.DCPUESTOTRABAJO,
         per_agrup.DCCATEGORIA,
         per_agrup.COMPERSONAL,
         Year(per_agrup.FECHAJORNADA),
         Month(per_agrup.FECHAJORNADA)
  HAVING ((per_agrup.COEMPRESA='1') 
  AND ((per_agrup.COTIPOMOV)=6 
  OR (per_agrup.COTIPOMOV)=48 
  OR (per_agrup.COTIPOMOV)=85 
  OR (per_agrup.COTIPOMOV)=71 
  OR (per_agrup.COTIPOMOV)=61 
  OR (per_agrup.COTIPOMOV)=5 
  OR (per_agrup.COTIPOMOV)=9 
  OR (per_agrup.COTIPOMOV)=94 
  OR (per_agrup.COTIPOMOV)=11 
  OR (per_agrup.COTIPOMOV)=111 
  OR (per_agrup.COTIPOMOV)=22 
  OR (per_agrup.COTIPOMOV)=7)
  AND ((Year(per_agrup.FECHAJORNADA))=2015)
  AND ((Month(per_agrup.FECHAJORNADA))=1)) 
 ORDER BY per_agrup.COEMPRESA,
          per_agrup.DCCENTROS,
          per_agrup.DCDIVISIONES,
          per_agrup.DCGRUPPROF,
          per_agrup.DCUNIPROD,
          per_agrup.DCPUESTOTRABAJO,
          per_agrup.DCCATEGORIA,
          per_agrup.DCINCIDENCIA

我注意到删除这最后一列查询工作正常

Sum(IIf(per_agrup.COMPERSONAL=1 And per_agrup.COCOBERTURA Is Not Null,IIf(per_cober_agrup.COCOBERTURA Is Not Null And per_cober_agrup.COMPERSONAL=1,Round(per_cober_agrup.SumaDeHORAS/60.00,2),IIf(per_cober_agrup.COCOBERTURA Is Null,Round(per_agrup.SumaDeHORAS/60.00,2),0)),Round(per_agrup.SumaDeHORAS/60.00,2))) AS HORES 

SQL Server 2008中的最后一列有什么问题?

谢谢你,请原谅我的英语不好。

1 个答案:

答案 0 :(得分:0)

用CASE法令取代IIF解决了这个问题。

感谢@Lamak和@ chipmunkofdoom2