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 ; &