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

#6 Alejandro Mesa
05/04/2008 - 16:52 | Informe spam
Carlos M. Calvelo,

De acuerdo, me referi a la funcion CASE porque es la que estavamos usando.
Creo que aunque la solucion que mencione pudiera ser de ayuda, lo mas
practico seria usar una tabla derivada o CTE.

select *
from
(
blablabla
union all
blablabla
)
order by case when [id] = 0 then 1 else 2 end ASC, [id], nombre


AMB


"Carlos M. Calvelo" wrote:

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
#7 Carlos M. Calvelo
05/04/2008 - 17:48 | Informe spam
On 5 apr, 16:52, Alejandro Mesa
wrote:
Carlos M. Calvelo,

De acuerdo, me referi a la funcion CASE porque es la que estavamos usando.
Creo que aunque la solucion que mencione pudiera ser de ayuda, lo mas
practico seria usar una tabla derivada o CTE.

select *
from
(
blablabla
union all
blablabla
)
order by case when [id] = 0 then 1 else 2 end ASC, [id], nombre




De acuerdo Alejandro. O una vista en SS2000.
Vaya cosas tiene el SQL!

SELECT * FROM X
y simplemente X deberían ser equivalentes.

En este caso siendo X una union pero por mi parte también
si fuera simplemente una tabla base.

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