No acabo de entender porqué me da este error:
Servidor: mensaje 104, nivel 15, estado 1, línea 3
Debe haber elementos ORDER BY en la lista de selección si la instrucción
contiene el operador UNION.
¿No quedamos que el order by en UNION se pone en la última instrucción
select?
select
e.codigoempresa, e.nombre, t.cod_trabajador, t.nombre,
convert(char(12), hc.f_inicio, 103) as inic_contr,
convert(char(12), hc.f_fin, 103) as fi_contr,
convert(char(12), hc.f_baja, 103) as baixa_contr,
convert(char(12), t.f_ingreso, 103) as ingres,
convert(char(12), t.f_baja, 103) as baixa_treb
from históricocontratos hc
inner join empresas e
on hc.codigoempresa = e.codigoempresa
inner join trabajadores t
on t.codigoempresa = hc.codigoempresa
and t.cod_trabajador = hc.cod_trabajador
where hc.codigoempresa < 7999
and ((hc.f_inicio between '20041101' and '20041130')
or (hc.f_baja between '20041101' and '20041130'))
union all
select
e.codigoempresa, e.nombre, t.cod_trabajador, t.nombre,
convert(char(12), hc.f_inicio, 103) as inic_contr,
convert(char(12), hc.f_fin, 103) as fi_contr,
convert(char(12), hc.f_baja, 103) as baixa_contr,
convert(char(12), t.f_ingreso, 103) as ingres,
convert(char(12), t.f_baja, 103) as baixa_treb
from trabajadores t
inner join empresas e
on t.codigoempresa = e.codigoempresa
left outer join históricocontratos hc
on t.codigoempresa = hc.codigoempresa
and t.cod_trabajador = hc.cod_trabajador
where t.codigoempresa < 7999
and ((t.f_ingreso between '20041101' and '20041130')
or (t.f_baja between '20041101' and '20041130'))
order by t.codigoempresa, t.cod_trabajador
Gracias
Joan Q
Leer las respuestas