2017-08-30 66 views
0

我想要得到的行數由B柱這樣的組合在A列中每個不同的值:MySQL的SELECT COUNT成單獨列

------------------------------------------------------ 
| B | AValue1 | AValue2 | Avalue3 | AValue4 | ...... | 
------------------------------------------------------ 
|B1 | x | x | x | x | x | 
|B2 | x | x | x | x | x | 
|...| x | x | x | x | x | 
------------------------------------------------------- 

x是不同的計數。 現在我越來越基本上都採用「GROUP BY(A,B)」 相同的數據,但它的形式是:

---------------------------------------------- 
| A   | B  | Count    | 
----------------------------------------------  
| AValue1 | BValue1 |  x    | 
| ...  | ....  |  x    | 
---------------------------------------------- 

之後,我必須在PHP或客戶在轉換數據的JavaScript。 我可以拿出第一個表的唯一方法就是爲A中的每個值做一個子查詢選擇,但這樣做的目的是爲了更簡單和更乾淨的解決方案。 有沒有一種簡單的方法可以在SQL中實現這一點,或者是通過錶轉換Group By table的最佳方法?在此先感謝

+1

所以,如果'A'列有一千個不同的值,你會想一千列? – BeetleJuice

+1

https://stackoverflow.com/questions/7674786/mysql-pivot-table – GolezTrol

+0

@BeetleJuice理論上是的,雖然在這種情況下,我可以肯定,該列將只有大約30個不同值 – RagingPixels

回答

0

@ GolezTrol的評論指出我在正確的方向。 MySQL的黯然可是沒有數據透視表,但我設法使用下面的一組CONCAT語句來解決這個問題:

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'SUM(IF(B = ''', 
     B, 
     ''', 1, 0)) AS `', 
     B, 
     '`' 
    ) 
) INTO @sql 
FROM table 
SET @sql = CONCAT('SELECT A, ', @sql, ' FROM table GROUP BY A'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;