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

#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


Respuesta Responder a este mensaje
#2 Joan Q.
15/12/2004 - 16:06 | Informe spam
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
>
>


Respuesta Responder a este mensaje
#3 Maxi
15/12/2004 - 16:15 | Informe spam
Hola, que raro che, yo lo probe y me funciona, mira este query:

SELECT WO.BASE_ID,WO.LOT_ID,WO.SPLIT_ID,P.DESCRIPTION FROM
WORK_ORDER WO INNER JOIN PART P ON WO.PART_ID = P.ID
WHERE WO.SUB_ID='0' AND P.ID LIKE 'LUFKIN%'
UNION ALL

SELECT WO.BASE_ID,WO.LOT_ID,WO.SPLIT_ID,P.DESCRIPTION FROM
WORK_ORDER WO INNER JOIN PART P ON WO.PART_ID = P.ID
WHERE WO.SUB_ID='0' AND P.ID LIKE 'SID%'
ORDER BY WO.BASE_ID,WO.LOT_ID




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


Respuesta Responder a este mensaje
#4 ulises
15/12/2004 - 16:21 | Informe spam
Puedes usar el numero de la columna para ordenar, p.e.
ORDER BY 1,3.

Una nota adicional, cuando usas UNION los campos que se
incluyen en el ORDER BY deben aparecer en la cláusula
SELECT en forma obligatoria.

Saludos,
Ulises

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
>
>






.

Respuesta Responder a este mensaje
#5 Salvador Ramos
15/12/2004 - 16:23 | Informe spam
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
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida