Ver Mensaje Individual
  #1  
Antiguo 15-01-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Query con pivote: No termino de entenderlo

Por más vueltas que le estoy dando no acabo de comprender bien como funciona. Vamos a ver si soy capaz de explicarme.

Tengo dos tablas:

Proceso
CODIGO INTEGER
NOMBRE VARCHAR(30)

SYSDBA134147
PROCESO INTEGER,
CODIGO INTEGER,
FECHA SMALLINT,
VOTOS2 INTEGER DEFAULT 0,
VOTOS3 INTEGER DEFAULT 0,
VOTOS16 INTEGER DEFAULT 0,
VOTOS17 INTEGER DEFAULT 0,
VOTOS22 INTEGER DEFAULT 0,
VOTOS_3 INTEGER DEFAULT 0,
VOTOS_1 INTEGER DEFAULT 0,
VOTOS_2 INTEGER DEFAULT 0,
TOTAL INTEGER DEFAULT 0,
CENSO INTEGER DEFAULT 0

Esta última se crea sobre la marcha cada vez que se accede a la opción de la aplicación. El campo Proceso de ésta última es el campo Código de la primera. Con un query obtengo esta salida:

Y lo que necesito es una salida en la que aparezcan en un misma línea los resultados de cada tipo:
MUNICIPALES 32,6317 37,5252 32,1975 19,8322
AUTONÓMICAS... etc.
Sé que tiene que ser con el método de pivote, pero ninguna de las pruebas que he hecho me sale bien. Con este query:
Código SQL [-]
WITH Pivote AS (SELECT Proceso, Codigo, CAST(100 * VOTOS2 AS NUMERIC(6, 2)) / CAST(TOTAL AS NUMERIC(6, 2)) Porc FROM SYSDBA134147)
SELECT DISTINCT A.Nombre, C.Porc PorcC, D.Porc PorcD, E.Porc PorcE, F.Porc PorcF
FROM Proceso A, SYSDBA134147 B
LEFT JOIN Pivote C ON B.Codigo = C.Codigo
LEFT JOIN Pivote D ON B.Codigo = D.Codigo
LEFT JOIN Pivote E ON B.Codigo = E.Codigo
LEFT JOIN Pivote F ON B.Codigo = F.Codigo
WHERE A.Codigo = (SELECT Codigo FROM Proceso WHERE Nombre = 'MUNICIPALES') AND A.Codigo = B.Proceso
lo que he obtenido es esto:

Es evidente que me falta alguna condición pero no soy capaz de ver cual es.
Responder Con Cita