国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql 行列動態轉換的實現(列聯表,交叉表)

2024-07-24 13:11:49
字體:
來源:轉載
供稿:網友

(1)動態,適用于列不確定情況

create table table_name( id int primary key, col1 char(2), col2 char(2), col3 int);
insert into table_name values(1 ,'A1','B1',9),(2 ,'A2','B1',7),(3 ,'A3','B1',4),(4 ,'A4','B1',2),(5 ,'A1','B2',2),(6 ,'A2','B2',9),(7 ,'A3','B2',8),(8 ,'A4','B2',5),(9 ,'A1','B3',1),(10 ,'A2','B3',8),(11 ,'A3','B3',8),(12 ,'A4','B3',6),(13 ,'A1','B4',8),(14 ,'A2','B4',2),(15 ,'A3','B4',6),(16 ,'A4','B4',9),(17 ,'A1','B4',3),(18 ,'A2','B4',5),(19 ,'A3','B4',2),(20 ,'A4','B4',5);
select * from table_name;+----+------+------+------+| id | col1 | col2 | col3 |+----+------+------+------+| 1 | A1  | B1  |  9 || 2 | A2  | B1  |  7 || 3 | A3  | B1  |  4 || 4 | A4  | B1  |  2 || 5 | A1  | B2  |  2 || 6 | A2  | B2  |  9 || 7 | A3  | B2  |  8 || 8 | A4  | B2  |  5 || 9 | A1  | B3  |  1 || 10 | A2  | B3  |  8 || 11 | A3  | B3  |  8 || 12 | A4  | B3  |  6 || 13 | A1  | B4  |  8 || 14 | A2  | B4  |  2 || 15 | A3  | B4  |  6 || 16 | A4  | B4  |  9 || 17 | A1  | B4  |  3 || 18 | A2  | B4  |  5 || 19 | A3  | B4  |  2 || 20 | A4  | B4  |  5 |+----+------+------+------+
SET @EE='';SELECT @EE:=CONCAT(@EE,'SUM(IF(col2=/'',col2,'/'',',col3,0)) AS ',col2,',') FROM (SELECT DISTINCT col2 FROM table_name) A;SET @QQ=CONCAT('SELECT ifnull(col1,/'total/') AS columnA,',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(col3) AS TOTAL FROM table_name GROUP BY col1 WITH ROLLUP');PREPARE stmt2 FROM @QQ;EXECUTE stmt2;
+---------+------+------+------+------+-------+| columnA | B1  | B2  | B3  | B4  | TOTAL |+---------+------+------+------+------+-------+| A1   |  9 |  2 |  1 |  11 |  23 || A2   |  7 |  9 |  8 |  7 |  31 || A3   |  4 |  8 |  8 |  8 |  28 || A4   |  2 |  5 |  6 |  14 |  27 || total  |  22 |  24 |  23 |  40 |  109 |+---------+------+------+------+------+-------+

(2)第二個字段確定的情況下使用

SELECT  IFNULL(col1,'total') AS total,  SUM(IF(col2='B1',col3,0)) AS B1,  SUM(IF(col2='B2',col3,0)) AS B2,  SUM(IF(col2='B3',col3,0)) AS B3,  SUM(IF(col2='B4',col3,0)) AS B4,  SUM(IF(col2='total',col3,0)) AS total FROM (  SELECT col1,IFNULL(col2,'total') AS col2,SUM(col3) AS col3  FROM table_name  GROUP BY col1,col2  WITH ROLLUP  HAVING col1 IS NOT NULL ) AS A GROUP BY col1 WITH ROLLUP;

注: WITH ROLLUP 用于列上求和; SUM(IF(col2='total',col3,0)) AS total 用于行上求和。

(3)第二個字段確定的情況下使用

select ifnull(col1,'total') AS col1, sum(if(col2='B1',col3,0)) AS B1, sum(if(col2='B2',col3,0)) AS B2, sum(if(col2='B3',col3,0)) AS B3, sum(if(col2='B4',col3,0)) AS B4,SUM(col3) AS TOTAL from table_name group by col1 with rollup ;

以上這篇mysql 行列動態轉換的實現(列聯表,交叉表)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄城县| 棋牌| 玛沁县| 绵阳市| 南阳市| 邵阳县| 平乡县| 武城县| 丰原市| 淄博市| 峨眉山市| 湘潭市| 嘉义县| 蕉岭县| 什邡市| 台前县| 巴里| 旌德县| 怀安县| 哈密市| 屏山县| 华蓥市| 石林| 海丰县| 临沧市| 宜春市| 天柱县| 子洲县| 双鸭山市| 泸州市| 大悟县| 修武县| 抚顺县| 淮北市| 鄂伦春自治旗| 共和县| 黑龙江省| 大荔县| 永年县| 当阳市| 大关县|