Ayuda con consulta que usa Union, Group by y Order by

11/05/2004 - 21:46 por Ygnacio Durán | Informe spam
Buenas tardes,

Aqui va la pregunta: Supongase la siguiente consulta, que asi es como esta
actualmente (los nombres de tabla y campos no son reales). Las tablas
tabla1, tabla3 y tabla4 tienen un campo que se llama igual en las 3 pero el
contenido puede ser diferente

select
t1.clave, t1.campo1, t1.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>

UNION
select
t1.clave, t1.campo1, t1.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>

group by t1.clave, t1.campo1, t1.descripcion
order by t1.clave, t1.campo1, t1.descripcion


Ahora bien, en la consulta se necesita que en vez de mostrar t1.descripcion
se pueda mostrar t3.descripcion o t4.descripcion según sea el caso; es
decir:

select
t1.clave, t1.campo1, t3.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>

UNION
select
t1.clave, t1.campo1, t4.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>


El problema es que entonces se genera un error por el group by y el order
by:

Si coloco:
group by t1.clave, t1.campo1, t3.descripcion
order by t1.clave, t1.campo1, t3.descripcion

Se produce el error:
El prefijo de columna 't3' no coincide con un nombre de tabla o con un
alias usado en la consulta.

Si lo cambio a t4 da el mismo error.

Si le quito el prefijo da un error de columna ambigua,
Si no coloco ninguno da un error de La columna 't4.descripcion' de la lista
de selección no es válida, porque no está contenida en una función de
agregado ni en la cláusula GROUP BY.

Si dejo el de t1 dice que debe haber elementos ORDER BY en la lista de
selección si la instrucción contiene el operador UNION.


En fin que parece un cuento de nunca acabar.

Bueno saludos, disculpen lo largo del mensaje y gracias por su respuesta.


*** Ygnacio Durán ***
 

Leer las respuestas

#1 ulises
11/05/2004 - 22:19 | Informe spam
El group lo debes hacer por cada SELECT, en el caso del
ORDER puedes usar numerales, p.e.

select t1.clave, t1.campo1, t3.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>
GROUP BY t1.clave, t1.campo1, t3.descripcion
UNION ALL
select t1.clave, t1.campo1, t4.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>
group by t1.clave, t1.campo1, t4.descripcion

ORDER BY 1,2,3

Saludos,
Ulises

Buenas tardes,

Aqui va la pregunta: Supongase la siguiente consulta, que


asi es como esta
actualmente (los nombres de tabla y campos no son


reales). Las tablas
tabla1, tabla3 y tabla4 tienen un campo que se llama


igual en las 3 pero el
contenido puede ser diferente

select
t1.clave, t1.campo1, t1.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>

UNION
select
t1.clave, t1.campo1, t1.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>

group by t1.clave, t1.campo1, t1.descripcion
order by t1.clave, t1.campo1, t1.descripcion


Ahora bien, en la consulta se necesita que en vez de


mostrar t1.descripcion
se pueda mostrar t3.descripcion o t4.descripcion según


sea el caso; es
decir:

select
t1.clave, t1.campo1, t3.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla3 t3
on t1.clave = t3.clave
where <condiciones>

UNION
select
t1.clave, t1.campo1, t4.descripcion
from tabla1 t1
inner join tabla2 t2
on t1.clave = t2.clave
inner join tabla4
on t1.clave = t4.clave
where <condiciones>


El problema es que entonces se genera un error por el


group by y el order
by:

Si coloco:
group by t1.clave, t1.campo1, t3.descripcion
order by t1.clave, t1.campo1, t3.descripcion

Se produce el error:
El prefijo de columna 't3' no coincide con un nombre


de tabla o con un
alias usado en la consulta.

Si lo cambio a t4 da el mismo error.

Si le quito el prefijo da un error de columna ambigua,
Si no coloco ninguno da un error de La


columna 't4.descripcion' de la lista
de selección no es válida, porque no está contenida en


una función de
agregado ni en la cláusula GROUP BY.

Si dejo el de t1 dice que debe haber elementos ORDER BY


en la lista de
selección si la instrucción contiene el operador UNION.


En fin que parece un cuento de nunca acabar.

Bueno saludos, disculpen lo largo del mensaje y gracias


por su respuesta.


*** Ygnacio Durán ***


.

Preguntas similares