2011-06-24 7 views
13

Me pregunto si hay una manera de lograr esto con una consulta SQL.Agregando un valor estático a los resultados de una consulta SQL

Tengo una tabla, vamos a llamarlo "LISTOFTHINGS" que tiene dos campos de interés "ID" y "NAMEOFTHING"

Lo que quiero hacer es construir una consulta de tal manera que lo que se devuelve es el resultado de esta consulta:

SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING 

y añade una fila antes de la primera fila de la consulta anterior que tiene "-1 '' todas las cosas" como los valores.

Así que si la mesa tiene las tres entradas siguientes:

1, 'THING 1' 
3, 'THING 3' 
2, 'THING 2' 

A continuación, el resultado que quiero se parece a esto:

-1, 'ALL THINGS' 
1, 'THING 1' 
2, 'THING 2' 
3, 'THING 3' 

sé que puedo hacer la consulta y crear la lista con código, pero dentro del programa VB6 donde estoy usando esto, tengo una aplicación de terceros (que no tengo el código) que toma la consulta para llenar un control de tabla ACTIVEX con los resultados. No tengo los ganchos para agregar el valor estático.

También sé que podría poner un registro en la tabla para "-1, 'TODAS LAS COSAS'" pero el problema es que, si lo hago, tendré que cambiar un montón de lugares en el programa para ignore ese registro al hacer el procesamiento.

El valor 'TODAS LAS COSAS' es una especie de pseudoregistro que maneja un caso especial para una parte del programa.

Respuesta

25

¿Podría hacer una unión en la consulta?

SELECT -1 AS ID , 'ALL THINGS' AS NAMEOFTHING FROM DUAL /*'FROM DUAL' is an Oracle thing, 
                 not sure if you need to do 
                 something like that in DB2*/ 
UNION 
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING 

Al parecer, esta es la forma en que se debe hacer para DB2

SELECT -1 AS ID , 'ALL THINGS' AS NAMEOFTHING FROM SYSIBM.SYSDUMMY1 
UNION 
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING 
+1

creo que el DB2 equivalente de la tabla ficticia Oracle DUAL es SYSIBM .SYSDUMMY1 – dave

+0

En realidad, SÍ! Eso es exactamente lo que estaba buscando (siempre que sea SQL válido para el DBMS que estoy usando). Estaba cavando en la documentación tratando de averiguar cómo hacer una consulta estática, ¡pero mi SQL es un poco irregular! ¡Gracias! –

+2

probablemente debería usar UNION ALL en lugar de UNION. UNION comprueba si hay registros duplicados que deben eliminarse, lo que lleva más tiempo. UNION ALL guarda todos los registros, pero en este caso no debe haber ningún duplicado. – dave

12

Prueba esto:

SELECT -1 AS ID, 'ALL THINGs' AS NAMEOFTHING FROM SYSIBM.SYSDUMMY1 
UNION 
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS 
+1

Gracias! Creo que primero publicaste el código correcto, pero la respuesta anterior es más completa, por lo que la marqué como aceptada. –

Cuestiones relacionadas