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

Preguntas similare

Leer las respuestas

#6 Joan Q.
15/12/2004 - 16:34 | Informe spam
Ahora sí. Muchas gracias a todos.
Joan Q
"Salvador Ramos" escribió en el
mensaje news:%
En la segunda select utiliza otro alias para la tabla de trabajadores, por
ejemplo t2, y en el order by utiliza este último alias t2

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Joan Q." escribió en el mensaje
news:
> Gracias Maxi,
>
> Servidor: mensaje 209, nivel 16, estado 1, línea 3
> El nombre de columna 'CodigoEmpresa' es ambiguo.
> Servidor: mensaje 209, nivel 16, estado 1, línea 3
> El nombre de columna 'COD_Trabajador' es ambiguo.
>
> Joan Q
>
> "Maxi" escribió en el mensaje
> news:
> > 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
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida