2011-06-21 68 views
1

新手在这里。MYSQL动态交叉表问题

我使用笨和MySQL 我怎样才能动态地(地名的数量可能会改变),从转换表:

+------+-------+-------+ 
| date | name | value | 
+------+-------+-------+ 
| 06-01| A | 1 | 
| 06-02| A | 2 | 
| 06-02| B | 3 | 
| 06-03| C | 4 | 
+------+-------+-------+ 

要:

+------+---+---+---+ 
| date | A | B | C | 
+------|---+---+---| 
| 06-01| 1 | | | 
| 06-02| 2 | 3 | | 
| 06-03| | | 4 | 
+------+---+---+---+ 

谢谢。

+0

对于crosstab和其他查询,结帐这个伟大的页面:http://www.artfulsoftware.com/infotree/queries.php – Mike

回答

2

像这样的东西应该工作。

SELECT date, 
     SUM(IF(name='A',value,0)) AS 'A', 
     SUM(IF(name='B',value,0)) AS 'B', 
     SUM(IF(name='C',value,0)) AS 'C' 
FROM myTable 
GROUP BY date 
ORDER BY date 

你需要知道你的列名可能是各款项手动添加到您的SQL语句的东西,但你可以做到这一点使用PHP,如果它很可能会发生很大的变化。

同样,1更换value,如果你只是想每名多少次出现了一个数,而不是name总值的。

+1

我认为,你的意思是'GROUP BY日期' – rMX

+0

是的,好点。编辑,在,谢谢。 – Codecraft