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
 

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

Preguntas similares