当前位置: 首页 > article >正文

sql server 行转列及列转行

       图1 

       图2

1.行转列 (图1->图2)

1.方法一 (数据库通用),使用max 加case when 函数

-- 行转列  图1->图2
SELECT name,
 MAX(CASE WHEN subject='语文' THEN score ELSE 0 END) AS "语文",
 MAX(CASE WHEN subject='数学' THEN score ELSE 0 END) AS "数学",
 MAX(CASE WHEN subject='英语' THEN score ELSE 0 END) AS "英语"
FROM student
GROUP BY name;

运行结果: 

2.方法二,使用PIVOT

SELECT   
    name,  
    [语文],  
    [数学],  
    [英语]  
FROM   
(  
    SELECT name, subject, score  
    FROM student  
) AS SourceTable  
PIVOT  
(  
    MAX(score) -- 使用 MAX 因为 PIVOT 需要一个聚合函数  
    FOR subject IN ([语文], [数学], [英语])  
) AS PivotTable;

运行结果:  

 3.测试表及数据


CREATE TABLE student (  
    NAME VARCHAR(50),  
    SUBJECT VARCHAR(50),  
    SCORE INT 
);

INSERT INTO student (NAME, SUBJECT, SCORE) VALUES  
('小明', '语文', 96),  
('小明', '数学', 98),    
('小明', '英语', 95), 
('大花', '语文', 92), 
('大花', '数学', 96),  
('大花', '英语', 98);   

 2.列转行(图2->图1)

1.方法一 (数据库通用)使用union 来拼接

SELECT NAME, '语文' AS subject , MAX("语文") AS score
FROM student_scores GROUP BY NAME
UNION 
SELECT NAME, '数学' AS subject , MAX("数学") AS score
FROM student_scores GROUP BY NAME
UNION
SELECT  NAME, '英语' AS subject , MAX("英语") AS score
FROM student_scores GROUP BY NAME;

运行结果: 

 

2.方法二,使用UNPIVOT

​​-- 在SQL Server中使用的UNPIVOT示例  
SELECT   
    name,  
    subject,  
    score  
FROM   
(  
    SELECT name, [语文], [数学], [英语]  
    FROM student_scores  
) AS SourceTable  
UNPIVOT  
(  
    score FOR subject IN ([语文], [数学], [英语])  
) AS UnpivotTable;

运行结果: 

3.测试表及数据

CREATE TABLE student_scores (  
    name VARCHAR(50),  
    语文 INT, 
    数学 INT,   
    英语 INT 
);

INSERT INTO student_scores (name, 语文, 数学, 英语) VALUES  
('大花', 92, 96, 98),  
('小明', 96, 98, 95);


http://www.kler.cn/news/360080.html

相关文章:

  • 程序设计基础I-单元测试2(机测)
  • 华为eNSP Destination host unreachable和Request timeout!错误(详细解析)
  • 【无标题】如何使用yolo-v8 实现自定义目标检测
  • 教学平台的信息化之路:Spring Boot实践
  • 【ChatGPT】提高 ChatGPT 创意输出的提示词技巧
  • 在windows下利用安装docker加vscode调试OceanBase,
  • Pandas | 通过PUBG数据集进行数据分析并理解函数使用
  • 鸿蒙网络编程系列22-Web组件文件上传示例
  • 【红日安全】vulnstack (一)
  • K8S---02.Kubernetes的pod
  • python支付宝支付和回调
  • 计算机毕业设计Python深度学习房价预测 房源可视化 房源爬虫 二手房可视化 二手房爬虫 递归决策树模型 机器学习 深度学习 大数据毕业设计
  • 【Vue.js设计与实现】第三篇第10章:渲染器-双端 Diff 算法-阅读笔记
  • 如何使用postman进行自动化
  • Milvus 到 TiDB 向量迁移实践
  • 关于游戏行业工作的迷茫
  • Sqlite3 操作笔记
  • Java设计模式:工厂模式详解
  • ERC论文阅读(01)--BiosERC论文阅读笔记
  • 数据结构(8.3_2)——快速排序