Lo siento. Por más vueltas que le doy no acabo de entender bien como hacer este tipo de querys. Creo que he visto todos los hilos en los que se trata este tema; estuve viendo el código que puso
fjcg02 en
Trasnformadas, crosstab, pivot, referencias cruzadas ...
(Un apunte: El código del
ejemplo da un error -607 Malformed string al ejecutarlo con SQL Manager, y no he sido capaz de ver dónde está)
A partir de esta tabla:
quiero montar un query; los campos son INTEGER. En principìo había pensado en una salida parecida a esta:
Para esta salida uso este query:
Código SQL
[-]WITH Pivote AS (SELECT Codigo, Votos2, Total FROM SYSDBA122540 WHERE Total > 0)
SELECT A.Nombre,
CAST(100 * MAX(C.VOTOS2) AS DECIMAL(10 ,2))/CAST(MAX(C.Total) AS DECIMAL(10 ,2)) PorcC,
CAST(100 * MAX(D.VOTOS2) AS DECIMAL(10 ,2))/CAST(MAX(D.Total) AS DECIMAL(10 ,2)) PorcD,
CAST(100 * MAX(E.VOTOS2) AS DECIMAL(10 ,2))/CAST(MAX(E.Total) AS DECIMAL(10 ,2)) PorcE,
CAST(100 * MAX(F.VOTOS2) AS DECIMAL(10 ,2))/CAST(MAX(F.Total) AS DECIMAL(10 ,2)) PorcF
FROM Proceso A, SYSDBA122540 B
LEFT JOIN Pivote C ON B.Codigo = C.Codigo AND C.Codigo IN (25, 26, 35, 24)
LEFT JOIN Pivote D ON B.Codigo = D.Codigo AND D.Codigo IN (29, 30, 36, 28)
LEFT JOIN Pivote E ON B.Codigo = E.Codigo AND E.Codigo IN (33, 34, 37, 32)
LEFT JOIN Pivote F ON B.Codigo = F.Codigo AND F.Codigo IN (40, 38, 42, 39)
WHERE A.Codigo = B.Proceso GROUP BY A.Nombre ORDER BY Nombre
Pero probablemente me sea más útil para lo que quiero otra en que los nombres de las columnas sean cada uno de los tipos (municipales, autonómicas, etc.) y en cada fila esté cada uno de lso resultados. Algo así:
Código:
Orden Municipales Autonómicas Generales Europeas
1 40,0009 39,2431 38,5656 49,0767
2 45,9111 46,9671 43,5847 51,1198
3 37,0923 37,0738 23,5756 38,8671
4 35,5026 28,5302 21,4285 28,6433
y por más vueltas que doy no sé como montarlo para que me genere esta última salida. De verdad que no acabo de entender cómo montar estos querys.