Casi, casi, ..., ERROR!!!

04/04/2008 - 20:13 por David | Informe spam
Microsoft SQL Server 2000

Muy buenas, por imperativo necesito devolver una serie de registros
perteneciente a una tabla Y AÑADIRLE la "posibilidad" de "TODOS" y que este
sea el primero y al mismo tiempo ordenados alfabéticamente (campo nombre),
es decir, imaginar que en la tabla se almacena:

Id: INT
nombre: STRING

1 Pepe
2 Juan
3 Antonio
4 Bartolo

La consulta debería devolver los registros ORDENADOS por el campo NOMBRE,
pero incluyendo "el registro" Todos en primer lugar:

0 Todos
3 Antonio
4 Bartolo
2 Juan
1 Pepe


He hecho la siguiente consulta QUE FUNCIONA SIN la clásula UNION (haciendo
trampas, añadiendo un registro FANTASMA llamado todos - NO NO !!! ESO no lo
puedo hacer porque la tabla de donde estraigo los datos la uso para otras
cosas y ese registro fantasma estaría MOLESTADO)

Consulta:

(SELECT [id],nombre FROM table)

UNION ALL

(SELECT 0 AS [id],'Todos' AS nombre)

ORDER BY (CASE WHEN [id]=0 then '' ELSE nombre END)

Me da el siguiente error:

Error:
104
"Debe haber elementos ORDER BY en la lista de selección si la instrucción
contiene el operador UNION"



¿Alguna ayuda?

Nota: mil gracias de antemano

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
04/04/2008 - 20:29 | Informe spam
On 4 apr, 20:13, "David" wrote:
Microsoft SQL Server 2000

Muy buenas, por imperativo necesito devolver una serie de registros
perteneciente a una tabla Y AÑADIRLE la "posibilidad" de "TODOS" y que este
sea el primero y al mismo tiempo ordenados alfabéticamente (campo nombre),
es decir, imaginar que en la tabla se almacena:

Id: INT
nombre: STRING

1    Pepe
2    Juan
3    Antonio
4    Bartolo

La consulta debería devolver los registros ORDENADOS por el campo NOMBRE,
pero incluyendo "el registro" Todos en primer lugar:

0     Todos
3    Antonio
4    Bartolo
2    Juan
1    Pepe

He hecho la siguiente consulta QUE FUNCIONA SIN la clásula UNION (haciendo
trampas, añadiendo un registro FANTASMA llamado todos - NO NO !!! ESO no lo
puedo hacer porque la tabla de donde estraigo los datos la uso para otras
cosas y ese registro fantasma estaría MOLESTADO)

Consulta:

(SELECT [id],nombre FROM table)

UNION ALL

(SELECT 0 AS [id],'Todos' AS nombre)

ORDER BY (CASE WHEN [id]=0 then '' ELSE nombre END)

Me da el siguiente error:

Error:
104
"Debe haber elementos ORDER BY en la lista de selección si la instrucción
contiene el operador UNION"

¿Alguna ayuda?




Hola David,

Prueba asi:

SELECT 1 as Grupo, [id], nombre FROM table
UNION ALL
SELECT 0 as Grupo, 0 AS [id], 'Todos' AS nombre
ORDER BY Grupo, nombre

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 David
04/04/2008 - 21:09 | Informe spam
Lo bueno, si breve, simple, claro, sin complicaciones, ..., dos veces bueno.

Muchísimas gracias por tú tiempo y CONOCIMIENTOS.

Por cierto, una curiosidad, ¿por qué en mi consulta daba ese error?
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
04/04/2008 - 21:50 | Informe spam
On 4 apr, 21:09, "David" wrote:
Lo bueno, si breve, simple, claro, sin complicaciones, ..., dos veces bueno.

Muchísimas gracias por tú tiempo y CONOCIMIENTOS.

Por cierto, una curiosidad, ¿por qué en mi consulta daba ese error?




Porque el ORDER BY sobre una UNION solo acepta los nombres
de la columnas especificadas en el primer SELECT de la UNION,
que es el que define los nombres y tipos de las columnas
para el resultado de la UNION.
Casi literalmente lo que dice el error. No le busques razones lógicas.
Digamos que es así 'by design'.

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 Alejandro Mesa
05/04/2008 - 02:28 | Informe spam
David,

Es uno de esos errores dificiles de comprender. Creo que el problema lo trae
funcion CASE. Si estas seguro que los valores de [id] son mayores que cero,
puedes lograr lo mismo usando:

(SELECT [id],nombre FROM table)

UNION ALL

(SELECT 0 AS [id],'Todos' AS nombre)

ORDER BY [id], nombre;


AMB


"David" wrote:

Lo bueno, si breve, simple, claro, sin complicaciones, ..., dos veces bueno.

Muchísimas gracias por tú tiempo y CONOCIMIENTOS.

Por cierto, una curiosidad, ¿por qué en mi consulta daba ese error?




Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
05/04/2008 - 11:17 | Informe spam
Hola Alejandro,

On 5 apr, 02:28, Alejandro Mesa
wrote:
David,

Es uno de esos errores dificiles de comprender. Creo que el problema lo trae
funcion CASE.



Yo no consigo hacer uso de *cualquier* otra función, o expresión que
no sea solo el nombre de una columna, en el group by sobre una unión.

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