Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ORDER BY condiconado (https://www.clubdelphi.com/foros/showthread.php?t=93772)

Angel.Matilla 22-02-2019 19:00:31

ORDER BY condiconado
 
No se me ha ocurrido otra forma de bautizar el hilo. Tengo este query:
Código PHP:

SELECT SUM(A.Votos), A.PartidoB.Sigla 
  FROM Resultados A
Partidos B 
 WHERE A
.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta 'Provincia'
   AND 
A.Proceso 34 AND A.CodPrv B.CodPrv AND A.Partido B.Codigo 
   
AND A.Municipio IN (SELECT Municipio FROM Junta WHERE CodPrv A.CodPrv AND Partido 2)
 
GROUP BY A.PartidoB.Sigla 
 ORDER BY 1 DESC
Partido 

que, por ejemplo, me da este resultado:

¿Hay alguna forma de montar ese query, u otro similar, de forma que los datos que corresponde a un código negativo salgan los últimos del mismo al margen de la columna de ordenación principal? No sé si me he explicado bien.

mamcx 22-02-2019 19:20:37

Cita:

Empezado por Angel.Matilla (Mensaje 530815)
No sé si me he explicado bien.

No, no hay datos de entrada ni los deseados de salida:

http://www.clubdelphi.com/foros/showthread.php?t=93348

oscarac 22-02-2019 22:47:00

¿Hay alguna forma de montar ese query, u otro similar, de forma que los datos que corresponde a un código negativo salgan los últimos del mismo al margen de la columna de ordenación principal? No sé si me he explicado bien.

no se entiende
ponlo graficamente

Angel.Matilla 23-02-2019 13:24:51

Cita:

Empezado por mamcx (Mensaje 530816)
No, no hay datos de entrada ni los deseados de salida:

La imagen es la salida que genera el query que hay al principio. Lo que me haría falta es que esas dos filas que aparecen en el medio de la imagen en las que el valor del código es negativo salieran las últimas.

mamcx 23-02-2019 15:44:54

Ok, vamos a ver si te entendi. El truco general es que debes proveer tu propia función de comparación (similar a https://stackoverflow.com/questions/...ustom-comparer) pero en sql. Básicamente, debes crear un campo extra que cambie la lógica que determina que es "mayor que":

Código SQL [-]
SELECT *,
CASE WHEN b <= 0 THEN (0, a) ELSE (1, a) END AS c
FROM (
    SELECT 10 as a, 1 as b
    UNION ALL
    SELECT 20,  2
    UNION ALL
    SELECT 10, -1 
    UNION ALL
    SELECT 20, -2 
)a
ORDER BY c DESC

Retorna:


Código:

a  | b  |  c
----+---+--------
 20 |  2 | (1,20)
 10 |  1 | (1,10)
 20 | -2 | (0,20)
 10 | -1 | (0,10)


Angel.Matilla 25-02-2019 11:25:22

Gracias por la respuesta. Lo probaré ahora mismo.

Angel.Matilla 25-02-2019 11:44:09

Cita:

Empezado por mamcx (Mensaje 530820)
Ok, vamos a ver si te entendi. El truco general es que debes proveer tu propia función de comparación (similar a https://stackoverflow.com/questions/...ustom-comparer) pero en sql. Básicamente, debes crear un campo extra que cambie la lógica que determina que es "mayor que":

¡Perfecto! El query me ha quedado así, tomando como base el ejemplo que puse al principio:
Código PHP:

SELECT SUM(A.VotosVotosA.PartidoB.Sigla,
       CASE 
WHEN Partido 0 THEN 0 ELSE 1 END AS c
  FROM Resultados A
Partidos B 
 WHERE A
.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta 'Provincia'
   AND 
A.Proceso 34 AND A.CodPrv B.CodPrv AND A.Partido B.Codigo 
   
AND A.Municipio IN (SELECT Municipio FROM Junta WHERE CodPrv A.CodPrv AND Partido 2)
 
GROUP BY A.PartidoB.Sigla 
 ORDER BY c DESC
Votos DESC 

y la salida es ahora de esta forma:


La franja horaria es GMT +2. Ahora son las 13:41:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi