<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        mysql行列轉換方法總結

        來源:懂視網 責編:小采 時間:2020-11-09 15:35:01
        文檔

        mysql行列轉換方法總結

        mysql行列轉換方法總結:轉 http://bbs.csdn.net/topics/310045927 在某些數據庫中有交叉表,但在MySQL中卻沒有這個功能,但網上看到有不少朋友想找出一個解決方法,特集思廣義。無論對錯皆有分。 數據樣本: createtabletx( idintprimarykey, c1char(2
        推薦度:
        導讀mysql行列轉換方法總結:轉 http://bbs.csdn.net/topics/310045927 在某些數據庫中有交叉表,但在MySQL中卻沒有這個功能,但網上看到有不少朋友想找出一個解決方法,特集思廣義。無論對錯皆有分。 數據樣本: createtabletx( idintprimarykey, c1char(2

        轉 http://bbs.csdn.net/topics/310045927 在某些數據庫中有交叉表,但在MySQL中卻沒有這個功能,但網上看到有不少朋友想找出一個解決方法,特集思廣義。無論對錯皆有分。 數據樣本: createtabletx( idintprimarykey, c1char(2), c2char(2), c3int ); inser

        

        轉 http://bbs.csdn.net/topics/310045927

        在某些數據庫中有交叉表,但在MySQL中卻沒有這個功能,但網上看到有不少朋友想找出一個解決方法,特集思廣義。無論對錯皆有分。

        數據樣本:
        create table tx(
        id int primary key,
        c1 char(2),
        c2 char(2),
        c3 int
        );

        insert into tx 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);

        結果 (可不帶行/列匯總)
        [code=BatchFile]+------+-----+-----+-----+-----+------+
        |C1 |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 |
        +------+-----+-----+-----+-----+------+[/code]


        方法一:

        mysql> SELECT
        -> IFNULL(c1,'total') AS total,
        -> SUM(IF(c2='B1',c3,0)) AS B1,
        -> SUM(IF(c2='B2',c3,0)) AS B2,
        -> SUM(IF(c2='B3',c3,0)) AS B3,
        -> SUM(IF(c2='B4',c3,0)) AS B4,
        -> SUM(IF(c2='total',c3,0)) AS total
        -> FROM (
        -> SELECT c1,IFNULL(c2,'total') AS c2,SUM(c3) AS c3
        -> FROM tx
        -> GROUP BY c1,c2
        -> WITH ROLLUP
        -> HAVING c1 IS NOT NULL
        -> ) AS A
        -> GROUP BY c1
        -> WITH ROLLUP;

        "total","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

        5 rows in set, 1 warning (0.00 sec)


        方法二:

        靜態:
        select c1,
        sum(if(c2='B1',C3,0)) AS B1,
        sum(if(c2='B2',C3,0)) AS B2,
        sum(if(c2='B3',C3,0)) AS B3,
        sum(if(c2='B4',C3,0)) AS B4,SUM(C3) AS TOTAL
        from tx
        group by C1
        UNION
        SELECT 'TOTAL',sum(if(c2='B1',C3,0)) AS B1,
        sum(if(c2='B2',C3,0)) AS B2,
        sum(if(c2='B3',C3,0)) AS B3,
        sum(if(c2='B4',C3,0)) AS B4,SUM(C3) FROM TX



        方法三:

        動態:
        SET @EE='';
        SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM
        (SELECT DISTINCT C2 FROM TX) A;
        SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
        PREPARE stmt2 FROM @QQ;
        EXECUTE stmt2;


        方法四:


        --木有合計,在SQL Server下測試通過

        if object_id('tempdb..#tx') is not null drop table #tx
        go
        create table #tx(
        id int primary key,
        c1 char(2),
        c2 char(2),
        c3 int
        );

        insert into #tx (id,c1,c2,c3) values (1 ,'A1','B1',9)
        insert into #tx (id,c1,c2,c3) values (2 ,'A2','B1',7)
        insert into #tx (id,c1,c2,c3) values (3 ,'A3','B1',4)
        insert into #tx (id,c1,c2,c3) values (4 ,'A4','B1',2)
        insert into #tx (id,c1,c2,c3) values (5 ,'A1','B2',2)
        insert into #tx (id,c1,c2,c3) values (6 ,'A2','B2',9)
        insert into #tx (id,c1,c2,c3) values (7 ,'A3','B2',8)
        insert into #tx (id,c1,c2,c3) values (8 ,'A4','B2',5)
        insert into #tx (id,c1,c2,c3) values (9 ,'A1','B3',1)
        insert into #tx (id,c1,c2,c3) values (10 ,'A2','B3',8)
        insert into #tx (id,c1,c2,c3) values (11 ,'A3','B3',8)
        insert into #tx (id,c1,c2,c3) values (12 ,'A4','B3',6)
        insert into #tx (id,c1,c2,c3) values (13 ,'A1','B4',8)
        insert into #tx (id,c1,c2,c3) values (14 ,'A2','B4',2)
        insert into #tx (id,c1,c2,c3) values (15 ,'A3','B4',6)
        insert into #tx (id,c1,c2,c3) values (16 ,'A4','B4',9)
        insert into #tx (id,c1,c2,c3) values (17 ,'A1','B4',3)
        insert into #tx (id,c1,c2,c3) values (18 ,'A2','B4',5)
        insert into #tx (id,c1,c2,c3) values (19 ,'A3','B4',2)
        insert into #tx (id,c1,c2,c3) values (20 ,'A4','B4',5)


        SELECT c1
        ,sum(CASE
        WHEN c2='B1' THEN c3
        ELSE 0
        END) AS [b1]
        ,sum(CASE
        WHEN c2='B2' THEN c3
        ELSE 0
        END) AS [b2]
        ,sum(CASE
        WHEN c2='B3' THEN c3
        ELSE 0
        END) AS [b3]
        ,sum(CASE
        WHEN c2='B4' THEN c3
        ELSE 0
        END) AS [b4]
        FROM #tx
        GROUP BY c1



        方法五:


        --動態的話

        if object_id('tempdb..#tx') is not null drop table #tx
        go
        create table #tx(
        id int primary key,
        c1 char(2),
        c2 char(2),
        c3 int
        );

        insert into #tx (id,c1,c2,c3) values (1 ,'A1','B1',9)
        insert into #tx (id,c1,c2,c3) values (2 ,'A2','B1',7)
        insert into #tx (id,c1,c2,c3) values (3 ,'A3','B1',4)
        insert into #tx (id,c1,c2,c3) values (4 ,'A4','B1',2)
        insert into #tx (id,c1,c2,c3) values (5 ,'A1','B2',2)
        insert into #tx (id,c1,c2,c3) values (6 ,'A2','B2',9)
        insert into #tx (id,c1,c2,c3) values (7 ,'A3','B2',8)
        insert into #tx (id,c1,c2,c3) values (8 ,'A4','B2',5)
        insert into #tx (id,c1,c2,c3) values (9 ,'A1','B3',1)
        insert into #tx (id,c1,c2,c3) values (10 ,'A2','B3',8)
        insert into #tx (id,c1,c2,c3) values (11 ,'A3','B3',8)
        insert into #tx (id,c1,c2,c3) values (12 ,'A4','B3',6)
        insert into #tx (id,c1,c2,c3) values (13 ,'A1','B4',8)
        insert into #tx (id,c1,c2,c3) values (14 ,'A2','B4',2)
        insert into #tx (id,c1,c2,c3) values (15 ,'A3','B4',6)
        insert into #tx (id,c1,c2,c3) values (16 ,'A4','B4',9)
        insert into #tx (id,c1,c2,c3) values (17 ,'A1','B4',3)
        insert into #tx (id,c1,c2,c3) values (18 ,'A2','B4',5)
        insert into #tx (id,c1,c2,c3) values (19 ,'A3','B4',2)
        insert into #tx (id,c1,c2,c3) values (20 ,'A4','B4',5)

        select * from #tx

        declare @sql varchar(8000)
        set @sql='select c1,'
        select @sql=@sql+'sum(case when c2='''+cast(c2 as varchar(10))+''' then c3 else 0 end)['+cast(c2 as varchar(10))+'],'
        from (select distinct c2 from #tx ) a
        print(@sql)

        set @sql=left(@sql,len(@sql)-1)+' from #tx group by c1'
        exec(@sql)
        if object_id('tempdb..#tx') is not null drop table #tx

        /*
        A1 9 2 1 11
        A2 7 9 8 7
        A3 4 8 8 8
        A4 2 5 6 14
        */



        測試

        1、

        mysql> SELECT
        -> IFNULL(c1,'total') AS total,
        -> SUM(IF(c2='B1',c3,0)) AS B1,
        -> SUM(IF(c2='B2',c3,0)) AS B2,
        -> SUM(IF(c2='B3',c3,0)) AS B3,
        -> SUM(IF(c2='B4',c3,0)) AS B4,
        -> SUM(IF(c2='total',c3,0)) AS total
        -> FROM (
        -> SELECT c1,IFNULL(c2,'total') AS c2,SUM(c3) AS c3
        -> FROM tx
        -> GROUP BY c1,c2
        -> WITH ROLLUP
        -> HAVING c1 IS NOT NULL
        -> ) AS A
        -> GROUP BY c1
        -> WITH ROLLUP;
        +-------+------+------+------+------+-------+
        | total | 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 |
        +-------+------+------+------+------+-------+
        5 rows in set, 1 warning (0.00 sec)


        2、

        mysql> select c1,
        -> sum(if(c2='B1',C3,0)) AS B1,
        -> sum(if(c2='B2',C3,0)) AS B2,
        -> sum(if(c2='B3',C3,0)) AS B3,
        -> sum(if(c2='B4',C3,0)) AS B4,SUM(C3) AS TOTAL
        -> from tx
        -> group by C1
        -> UNION
        -> SELECT 'TOTAL',sum(if(c2='B1',C3,0)) AS B1,
        -> sum(if(c2='B2',C3,0)) AS B2,
        -> sum(if(c2='B3',C3,0)) AS B3,
        -> sum(if(c2='B4',C3,0)) AS B4,SUM(C3) FROM TX
        -> ;
        +-------+------+------+------+------+-------+
        | c1 | 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 |
        +-------+------+------+------+------+-------+
        5 rows in set (0.00 sec)

        mysql>


        3、

        mysql> select ifnull(c1,'total'),
        -> sum(if(c2='B1',C3,0)) AS B1,
        -> sum(if(c2='B2',C3,0)) AS B2,
        -> sum(if(c2='B3',C3,0)) AS B3,
        -> sum(if(c2='B4',C3,0)) AS B4,SUM(C3) AS TOTAL
        -> from tx
        -> group by C1 with rollup ;
        +--------------------+------+------+------+------+-------+
        | ifnull(c1,'total') | 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 |
        +--------------------+------+------+------+------+-------+
        5 rows in set (0.00 sec)

        mysql>



        4、
        mysql> SET @EE='';
        mysql> SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM (SELECT DISTINCT C2 FROM TX) A;


        mysql> SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
        Query OK, 0 rows affected (0.00 sec)

        mysql> PREPARE stmt2 FROM @QQ;
        Query OK, 0 rows affected (0.00 sec)
        Statement prepared

        mysql> EXECUTE stmt2;
        +--------------------+------+------+------+------+-------+
        | ifnull(c1,'total') | 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 |
        +--------------------+------+------+------+------+-------+
        5 rows in set (0.00 sec)

        mysql>




        5、


        mysql> SET @EE='';
        mysql> SELECT @EE:=CONCAT(@EE,'SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2,',') FROM (SELECT DISTINCT C2 FROM TX) A;


        mysql> SET @QQ=CONCAT('SELECT ifnull(c1,\'total\'),',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(C3) AS TOTAL FROM TX GROUP BY C1 WITH ROLLUP');
        Query OK, 0 rows affected (0.00 sec)

        mysql> PREPARE stmt2 FROM @QQ;
        Query OK, 0 rows affected (0.00 sec)
        Statement prepared

        mysql> EXECUTE stmt2;
        +--------------------+------+------+------+------+-------+
        | ifnull(c1,'total') | 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 |
        +--------------------+------+------+------+------+-------+
        5 rows in set (0.00 sec)

        mysql>

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        mysql行列轉換方法總結

        mysql行列轉換方法總結:轉 http://bbs.csdn.net/topics/310045927 在某些數據庫中有交叉表,但在MySQL中卻沒有這個功能,但網上看到有不少朋友想找出一個解決方法,特集思廣義。無論對錯皆有分。 數據樣本: createtabletx( idintprimarykey, c1char(2
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 午夜免费福利片观看| 在线涩涩免费观看国产精品| 18勿入网站免费永久| 亚洲天堂一区二区| 88av免费观看| 亚洲黄色在线观看视频| 久久九九兔免费精品6| 亚洲伊人久久大香线蕉| 野花高清在线观看免费3中文| 色噜噜亚洲男人的天堂| 女人张开腿给人桶免费视频| 亚洲欧洲国产综合AV无码久久| 日韩电影免费在线| 美景之屋4在线未删减免费| 国产日韩成人亚洲丁香婷婷| 男女一进一出抽搐免费视频| 亚洲AV无一区二区三区久久| 一级毛片在线观看免费| 久久亚洲精品国产精品婷婷| 国产一级高清视频免费看| fc2成年免费共享视频网站| 亚洲AV永久精品爱情岛论坛| 在线观看www日本免费网站| 亚洲一区精彩视频| 国产成人免费高清在线观看| 一级毛片a免费播放王色| 婷婷久久久亚洲欧洲日产国码AV| 国产高清免费视频| 最新亚洲人成无码网站| 久久亚洲国产精品一区二区| 8x成人永久免费视频| 亚洲AV性色在线观看| 国产日韩亚洲大尺度高清| 国产在线观看免费观看不卡| 日韩成人精品日本亚洲| 亚洲AV无码乱码在线观看富二代| 成年黄网站色大免费全看| 有码人妻在线免费看片| 久久久亚洲欧洲日产国码二区| 性感美女视频免费网站午夜| 中文字幕无线码中文字幕免费|