2012-09-10 23 views
6

que estoy tratando de contar en varias columnas a continuación, el grupo por una suma total en el mismo datos aparecen en cualquier columnaSQL, cuentan en varias columnas a continuación, el grupo de

Source data table: 

P1 P2 P3 
----------- 
a b 
a a a 
b c 
a b b 
b a 

lo quiero mostrar algo como esto :

Desired query output: 

    Total 
    ------------- 
a | 6 
b | 5 
c | 1 

Respuesta

7

Se puede utilizar una consulta de unión

SELECT x.f1,Count(x.f1) FROM 
(SELECT p1 As F1 FROM table 
UNION ALL 
SELECT p2 As F1 FROM table 
UNION ALL 
SELECT p3 As F1 FROM table) x 
GROUP BY x.f1 
+1

Si desea evitar el NULO, entonces debe tener una cláusula WHERE para eliminar valores NULOS. –

5

puede union all el registro s en una subconsulta y en la consulta externa, count cada valor.

SELECT b.a, COUNT(b.a) 
FROM 
    (
     SELECT P1 a 
     FROM tableName 
     UNION ALL 
     SELECT P2 a 
     FROM tableName 
     UNION ALL 
     SELECT P3 a 
     FROM tableName 
    ) b 
GROUP BY b.a 
+2

Has usado UNION que eliminará duplicados. – Fionnuala

+0

@Remou gracias, me olvido de eso. –

Cuestiones relacionadas