1. 程式人生 > >mysql 動態行轉列

mysql 動態行轉列

前言: mysql的行轉列並沒有mssql中的pivot

測試資料:

DROP TABLE IF EXISTS `mytest`;
CREATE TABLE `mytest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `class` varchar(255) DEFAULT NULL,
  `score` double DEFAULT NULL,
  `userid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

INSERT INTO `mytest` VALUES ('1', 'math', '90', '1');
INSERT INTO `mytest` VALUES ('2', 'english', '90', '1');
INSERT INTO `mytest` VALUES ('3', 'computer', '80', '1');
INSERT INTO `mytest` VALUES ('4', 'sports', '90', '1');
INSERT INTO `mytest` VALUES ('5', 'math', '80', '2');
INSERT INTO `mytest` VALUES ('6', 'english', '85', '2');
INSERT INTO `mytest` VALUES ('7', 'computer', '100', '2');



語句:

SET @EE='';
    SELECT @EE:=CONCAT(@EE,'SUM(IF(class=\'',class,'\'',',score,0)) AS ',class,',') 
    FROM (SELECT DISTINCT class FROM mytest) A;
SET @QQ=CONCAT('SELECT mytest.userid AS columnA,',LEFT(@EE,LENGTH(@EE)-1),' 
    FROM mytest GROUP BY userid');
PREPARE stmt2 FROM @QQ;


PS: 如果將這塊sql封裝成儲存過程,會返回2個結果集,一個sql語句,還有一個查詢結果。
所以如果是儲存過程的話,推薦這麼實用:

#drop PROCEDURE sp_mytest

create PROCEDURE sp_mytest()
begin 
SET @EE='';
    SELECT b.* into @EE from ( SELECT @EE:=CONCAT(@EE,'SUM(IF(class=\'',class,'\'',',score,0)) AS ',class,',') col
    FROM (SELECT DISTINCT class FROM mytest) A) b ORDER BY b.col desc limit 0,1 ;
SET @QQ=CONCAT('SELECT mytest.userid AS columnA,',LEFT(@EE,LENGTH(@EE)-1),' 
    FROM mytest GROUP BY userid');
PREPARE stmt2 FROM @QQ;
EXECUTE stmt2;
end


call sp_mytest()


相關推薦

mysql動態

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 DROP TABLE IF EXISTS

MySql 動態整理

在開發過程中,我們或許經常碰到這樣的需求,即將某些sql查詢資料實現動態行轉列。 舉例來說:一個學生參加過多次考試,如果想知道該學生最近幾次考試語文的成績,如下圖: 對於使用者來說,我們希望看到的如下圖(即資料動態實現行轉列): 下面看資料表結構: CREAT

mysql 動態

前言: mysql的行轉列並沒有mssql中的pivot 測試資料: DROP TABLE IF EXISTS `mytest`; CREATE TABLE `mytest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cl

MySQL儲存過程的動態

轉載:http://segmentfault.com/a/1190000004314724?ref=myread MySQL儲存過程中使用動態行轉列 最近做專案關於資料報表處理,然而資料庫儲存格式和報表展現形式不同,需要進行一下行轉列的操作,在做上一個專案的時候也看

oracle 存儲過程-動態,解決。

pla gin sel rom con left join from blog creat 包頭 create or replace package pro_test as TYPE out_cursor IS REF CURSOR; procedure A

mybatis 動態

  SELECT user_name , MAX(CASE course WHEN '數學' THEN score END ) 數學, MAX(CASE course WHEN '語文' THEN score END ) 語文, MAX(CASE course WHEN '英語'

mySQL

因為MYSQL裡邊沒有  PIVOT      現記錄:   原表格:   mysql語句: SELECT MAX(CASE WHEN corol='紅' THEN NUM else

SQL Server 動態(引數化表名、分組欄位、欄位值)

一.本文所涉及的內容(Contents) 二.背景(Contexts)   其實行轉列並不是一個什麼新鮮的話題了,甚至已經被大家說到爛了,網上的很多例子多多少少都有些問題,所以我希望能讓大家快速的看到執行的效果,所以在動態列的基礎上再把表、分組欄位、行轉列欄位、值這四個行轉列固定需要的值變成真正意義的

Mysql-sql

原始資料如下圖所示:(商品的銷售明細)date=業務日期;Item=商品名稱;saleqty=銷售數量 -- 建立測試資料(表)create table test (Date varchar(10), item char(10),saleqty int);insert test values('2010

在論壇中出現的比較難的sql問題:39(動態 動態日期問題)

最近,在論壇中,遇到了不少比較難的sql問題,雖然自己都能解決,但發現過幾天后,就記不起來了,也忘記解決的方法了。 所以,覺得有必要記錄下來,這樣以後再次碰到這類問題,也能從中獲取解答的思路。 求一SQL語句。 create table #tab ( col1

MySQL 實現SQL

概述 好久沒寫SQL語句,今天看到問答中的一個問題,拿來研究一下。 情景簡介 學校裡面記錄成績,每個人的選課不一樣,而且以後會新增課程,所以不需要把所有課程當作列。資料表裡面數據如下圖,使用姓名+課程作為聯合主鍵(有些需求可能不需要聯合主鍵)。本文以MySQL為基

資料庫動態

--行列互轉 /*********************************************************************************************************************************

MySQL轉行、連線字串 concat、concat_ws、group_concat函式用法

1.concat函式 使用方法: CONCAT(str1,str2,…) 返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。 注意: 如果所有引數均為非二進位制字串,則結果為非二進位制字串。 如果自變

mysql簡單

DROP TABLE IF EXISTS `tb`; CREATE TABLE `tb` ( `id` varchar(12) CHARACTER SET utf8 COLLATE utf8_gene

mysql

行轉列最近遇到一需求原始數據如下:mysql> select id,sdkname,sid,date,total_count from u1ge_query_log;+------+----------------+------+------------+-------------+| id | s

mysql轉換

pan where mys 作用 統計 detail null 這就是 英語 http://blog.csdn.net/sinat_27406925/article/details/77507478 mysql 行列轉換 ,在項目中應用的極其頻繁,尤其是一些金融項目裏的報表

MySQL轉行

展示 course order by rem core null innodb tail mysql 行轉列 例如:把圖1轉換成圖2結果展示 圖1 圖2 CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NU

MySQL經典案例

  準備資料表 /* Navicat MySQL Data Transfer Source Server : MyDB Source Server Version : 50720 Source Host : localhost:3306 S

SQL動態構造方法

SQL行轉列的動態構造方法 /*假設有張學生成績表(tb)如下: 姓名 課程 分數 張三 語文 74 張三 數學 83 張三 物理 93 李四 語文 74 李四 數學 84 李四 物理 94 想變成(得到如下結果): 姓名 語文 數學 物理 ---- ---- ---- ---- 李四 74 8

mysql-

mysql-行轉列   行轉列列傳行更具體例子    1、檢視資料 Sql程式碼   SELECT  * FROM tabName ; &