【发布时间】:2016-05-05 02:58:14
【问题描述】:
我从 dt_table 与 dt_k 连接创建了一个数据透视表
table dt_k
+------+--------+-----+
| id_k | name_k | ott |
+------+--------+-----+
| 1 | item 1 | ss |
| 2 | item 2 | ss |
| 3 | item 3 | ww |
| 4 | item 4 | dd |
| 5 | item 5 | asa |
| 6 | item 6 | rr |
+------+--------+-----+
dt_table
+------+--------+------+----+
| id_t | id_u | id_k | k |
+------+--------+------+----+
| 1 | 22 | 1 | 2 |
| 2 | 22 | 2 | 3 |
| 3 | 22 | 3 | 23 |
| 4 | 22 | 4 | 4 |
| 5 | 22 | 6 | 34 |
| 6 | 24 | 1 | 23 |
| 7 | 24 | 2 | 34 |
| 8 | 24 | 3 | 54 |
| 9 | 24 | 4 | 21 |
| 11 | 24 | 6 | 44 |
+------+--------+------+----+
我正在使用数据透视表将行转换为列这是我的代码:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when col = ''',
col,
''' then value end) as `',
col, '`')
) INTO @sql
FROM
(
select concat('op_', `id_k`) col
from dt_table
) d;
SET @sql = CONCAT('SELECT d.id_u as id,', @sql, '
from
(
select id_k, id_u, concat(''op_'', `id_k`) col, k value
from dt_table
) d group by id_u ');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
这段代码给出如下结果
+------+------+------+------+------+------+
| id_u | op_1 | op_2 | op_3 | op_4 | op_6 |
+------+------+------+------+------+------+
| 22 | 2 | 3 | 23 | 4 | 34' |
| 24 | 23 | 34 | 54 | 21 | 44 |
+------+------+------+------+------+------+
我需要这张表像这样在每一列上显示最小值和最大值
+------+------+------+------+------+------+
| id_u | op_1 | op_2 | op_3 | op_4 | op_6 |
+------+------+------+------+------+------+
| 22 | 2 | 3 | 23 | 4 | 34 |
| 24 | 23 | 34 | 54 | 21 | 44 |
+------+------+------+------+------+------+
+------+------+------+------+------+------+
| id_u | op_1 | op_2 | op_3 | op_4 | op_6 |
+------+------+------+------+------+------+
| min | 2 | 3 | 23 | 4 | 34 |
| max | 23 | 34 | 54 | 21 | 44 |
+------+------+------+------+------+------+
感谢您的帮助.. 最近工作的这个资源http://sqlfiddle.com/#!9/297674/1
【问题讨论】:
-
你如何处理这个结果?
-
感谢回复,我想用最大值或最小值计算每行的距离
-
你只是想在命令行上显示这个?
-
不,我希望决赛桌显示每一行的距离,
-
第三次问...在哪里?在一本书里?一个电影?一本杂志?某处的网页?
标签: mysql pivot-table