mysql 多行轉多列

/*
Navicat Premium Data Transferide

Source Server : root
Source Server Type : MySQL
Source Server Version : 50725
Source Host : localhost:3306
Source Schema : cookbookcode

Target Server Type : MySQL
Target Server Version : 50725
File Encoding : 65001rem

Date: 13/03/2019 00:19:17
*/get

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;io

-- ----------------------------
-- Table structure for EMP
-- ----------------------------
DROP TABLE IF EXISTS EMP;
CREATE TABLE EMP (
EMPNO int(11) NOT NULL,
ENAME varchar(10) DEFAULT NULL,
JOB varchar(9) DEFAULT NULL,
MGR int(11) DEFAULT NULL,
HIREDATE date DEFAULT NULL,
SAL int(11) DEFAULT NULL,
COMM int(11) DEFAULT NULL,
DEPTNO int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;date

-- ----------------------------
-- Records of EMP
-- ----------------------------
BEGIN;
INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09', 3000, NULL, 20);
INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788, '1983-01-12', 1100, NULL, 20);
INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);
COMMIT;coding

SET FOREIGN_KEY_CHECKS = 1;查詢

將SQL
SELECTdi

job,
ename

FROMvi

EMP

查詢結果

轉爲

SQL實現
SELECT
max(CASE WHEN job='CLERK' THEN ENAME ELSE NULL END) AS clerks,
MAX(CASE WHEN job='ANALYST' THEN ename ELSE NULL END) AS analysts,
MAX(CASE WHEN job='MANAGER' THEN ENAME ELSE NULL END) AS manager,
MAX(case when job='PRESIDENT' THEN ENAME ELSE NULL END ) AS presidents,
max(case when job='SALESMAN' THEN ENAME ELSE NULL END) AS salesmans

FROM (

SELECT e.JOB,e.ENAME,(SELECT COUNT(*) FROM emp d WHERE e.job=d.job AND e.empno< d.empno) AS rnk FROM EMP e) x GROUP BY rnk

相關文章
相關標籤/搜索