order by en union

15/12/2004 - 15:46 por Joan Q. | Informe spam
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

#1 Maxi
15/12/2004 - 15:53 | Informe spam
Hola, saca el t. y deja solo el nombre de los campos, asi mira:

order by codigoempresa, cod_trabajador

y fijate si va bien ;)



Salu2
Maxi


"Joan Q." escribió en el mensaje
news:
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


Preguntas similares