-2

上,但不是在2008年工作的下面的查詢工作的SQL Server 2014就好了,但是SQL Server 2008上以下錯誤回報:SQL查詢的SQL Server 2014 R2

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 

什麼是wron g與SQL Server 2008中的最後一列?

謝謝你,請原諒我的英文不好。

+4

'IIF'從SQL Server的作品2012+ – Lamak

+1

'IIF'是一個新的SQL Server 2012的建議使用'CASE'代替。 –

+1

您不應該使用年/月功能作爲搜索條件。它防止索引使用,並會導致性能不佳。使用per_agrup.FECHAJORNADA> ='20150101'和per_agrup.FECHAJORNADA <'20150201' - 樣式 –

回答

0

用CASE語句替換IIF解決了這個問題。

感謝@Lamak和@ chipmunkofdoom2