2012-09-10 4 views
6

ich für eine Gesamtsumme in mehreren Spalten dann die Gruppe zu zählen versuchen, wo die gleichen Daten in jeder SpalteSQL, zählt in mehreren Spalten dann Gruppe von

Source data table: 

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

Ich mag es so etwas zeigen, erscheinen :

Desired query output: 

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

Antwort

7

können Sie eine Union-Abfrage

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

Wenn Sie die NULL vermeiden möchten, sollten Sie eine WHERE-Klausel haben, um NULL-Werte zu entfernen. –

5

verwenden können Sie den Datensatz union all s in einer Unterabfrage und auf der äußeren Abfrage, count jeder Wert.

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

Sie haben UNION verwendet, wodurch Duplikate eliminiert werden. – Fionnuala

+0

@Remou danke, ich vergesse das. –