我正在尝试创建一个嵌套结构;
id | degerAdi | deger
_____________________________
1 | asd | 1
2 | asd | 2
3 | asd | 345
4 | rty | 6765
5 | rty | ljkl
6 | hhh | 567
7 | hjh | 5674
8 | ffgu | 567
9 | qwe | 345345
10 | qwe | fghfghfh
11 | qwe | ghghjghjgj
我需要一种方法来获取结果,例如以'degerAdi'colmn的值作为colmn名称,以及以'deger'colmn的相关值作为这些colm的值(行)。
(对不起,我的英语水平差。)
我需要这样的结果;
asd | rty | hhh | hjh | ffgu | qwe
-----------------------------------------------------
1 | 6765 | 567 | 5674 | 567 | 345345
2 | 6765 | NULL | NULL | NULL | fghfghfh
345 | NULL | NULL | NULL | NULL | ghghjghjgj
最佳答案
您正在尝试PIVOT
数据,但是MySQL没有PIVOT
函数。另外,为了简化操作,您将希望基于degerAdi
值对数据进行分区以应用行号。如果您知道已知的列数,则可以使用:
select rn,
max(case when DEGERADI = 'asd' then DEGER end) asd,
max(case when DEGERADI = 'rty' then DEGER end) rty,
max(case when DEGERADI = 'hhh' then DEGER end) hhh,
max(case when DEGERADI = 'hjh' then DEGER end) hjh,
max(case when DEGERADI = 'ffgu' then DEGER end) ffgu,
max(case when DEGERADI = 'qwe' then DEGER end) qwe
from
(
select id, degerAdi, deger,
@num := if(@degerAdi = `degerAdi`, @num + 1, 1) as rn,
@degerAdi := `degerAdi` as dummy
from table1
) x
group by rn;
见SQL Fiddle With Demo
如果列数未知,则需要使用准备好的语句:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when degerAdi = ''',
degerAdi,
''' then deger end) AS ',
degerAdi
)
) INTO @sql
FROM Table1;
SET @sql
= CONCAT('SELECT rn, ', @sql, '
from
(
select id, degerAdi, deger,
@num := if(@degerAdi = `degerAdi`, @num + 1, 1) as rn,
@degerAdi := `degerAdi` as dummy
from table1
) x
group by rn');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
见SQL Fiddle with demo
关于mysql - 我需要一种在MySQL中将列值用作列名的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12730070/