Aquí es la situación que estoy tratando de resolver:

Tengo una consulta que podría devolver un conjunto de registros. El campo se ordenan por podría tener un número de valores diferentes – por el bien de esta pregunta vamos a decir que el valor puede ser a, B, C, D, E o Z

Ahora, dependiendo de los resultados de la consulta, la clasificación de las necesidades que se comportan de la siguiente manera:
Si sólo Una-E los registros se encuentran luego de la clasificación «natural» está bien. Pero si un Z récord está en los resultados, entonces tiene que ser el primer resultado en la consulta, pero el resto de los registros deben ser «naturales» de orden.

Por ejemplo, si Un C D se encuentran, el resultado debe ser

A
C
D

Pero si a B D E Z se encuentra a continuación, el resultado debe ser ordenada:

Z
A
B
D
E

Actualmente, la consulta sería:

SELECT NAME, SOME_OTHER_FIELDS FROM TABLE ORDER BY NAME

Sé que puedo código de una función de ordenación de hacer lo que quiero, pero por lo que estoy usando los resultados, me parece que no puede usar porque los resultados están a cargo de una tercera parte de la biblioteca, a la que me acaba de pasar la consulta SQL. Es entonces el procesamiento de los resultados, y parece que no hay ganchos para mí para ordenar los resultados y acaba de pasar los resultados a la biblioteca. Se debe hacer la consulta SQL a sí mismo, y no puedo acceder al código fuente de la biblioteca.

Así que para todos ustedes SQL gurús de ahí, se puede proporcionar una consulta para mí que va a hacer lo que quiero?

la base de datos que estás usando?
DB2 es el backend. Estoy trabajando con algunos de código de la herencia. Si puedo evitar cambiar el SQL que el sistema es el uso que yo hago. Pero de vez en cuando encuentro cosas que hay que arreglar.

OriginalEl autor Zeke Hansell | 2011-10-22

3 Comentarios

  1. 35

    ¿Cómo se puede identificar a la Z grabar? Lo que lo diferencia? Una vez que usted entiende que, a añadir a su cláusula ORDER BY.

    SELECT name, *
    FROM [table]
    WHERE (x)
    ORDER BY
        (
         CASE
           WHEN (record matches Z) THEN 0
           ELSE 1
         END
        ),
        name

    De esta manera, sólo la Z registro se corresponde con el primer pedido, y todos los demás registros se ordenan por la de segundo orden, especie (nombre). Usted puede excluir el segundo fin de ordenar si usted realmente no lo necesita.

    Por ejemplo, si Z es la cadena de caracteres ‘Bob’, entonces su pregunta podría ser:

    SELECT name, *
    FROM [table]
    WHERE (x)
    ORDER BY
        (
         CASE
           WHEN name='Bob' THEN 0
           ELSE 1
         END
        ), name

    Mis ejemplos son para T-SQL, ya que usted no ha mencionado la base de datos que estás usando.

    Esto parece que podría ser en la dirección en la que quiero ir.

    OriginalEl autor Stephen Jennings

  2. 1

    No está seguro de qué DB utilizar – las siguientes obras para Oracle:

    SELECT 
    NAME, 
    SOME_OTHER_FIELDS, 
    DECODE (NAME, 'Z', '_', NAME ) SORTFIELD 
    FROM TABLE 
    ORDER BY DECODE (NAME, 'Z', '_', NAME ) ASC

    OriginalEl autor Yahia

  3. 1

    Hay un número de maneras de resolver este problema y la mejor solución depende de un número de factores que usted no discutir tales como la naturaleza de aquellos a..Z valores y qué producto de base de datos que está utilizando.

    Si usted tiene un solo valor que tiene para ordenar en la parte superior, usted puede ORDER BY una expresión que se asigna ese valor a la más baja posible de la especie valor (con CASE o IIF o IFEQ, dependiendo de su base de datos).

    Si usted tiene varias diferentes y especiales de ordenación de los valores que podrían ORDER BY una expresión más complicada o podría UNION juntos varios SELECTs, con una SELECT predeterminada para el tipo y un extra de SELECT para cada valor especial. El SELECTs incluiría una especie de columna.

    Por último, si usted tiene un par de valores que puede poner el tipo de los valores en una tabla independiente y JOIN que la tabla en la consulta.

    OriginalEl autor Larry Lustig

Dejar respuesta

Please enter your comment!
Please enter your name here