2012-09-10 34 views
6

Tôi cố gắng để đếm trong nhiều cột sau đó nhóm bằng cách cho một tổng hợp dữ liệu tương tự xuất hiện trong bất kỳ cộtSQL, đếm trong nhiều cột sau đó nhóm bởi

Source data table: 

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

Tôi muốn nó hiển thị một cái gì đó như thế này :

Desired query output: 

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

Trả lời

7

Bạn có thể sử dụng một truy vấn đoà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

Nếu bạn muốn tránh NULL, thì bạn nên có mệnh đề where để xóa giá trị NULL. –

5

Bạn có thể union all kỷ lục trong truy vấn phụ và truy vấn bên ngoài, count mỗi giá trị.

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

Bạn đã sử dụng UNION để loại bỏ các bản sao. – Fionnuala

+0

@Remou cảm ơn, tôi quên điều đó. –

Các vấn đề liên quan