以下查询在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中的最后一列有什么问题?
谢谢你,请原谅我的英语不好。
答案 0 :(得分:0)
用CASE法令取代IIF解决了这个问题。
感谢@Lamak和@ chipmunkofdoom2