2017-08-30 31 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;