sql如何实现吧多条记录合成一条

2025-10-27 18:06:58

1、打开SSMS并登录数据库,点击新建查询按钮新建一个查询窗口。下面将用一个三国武将的属性表为例演示如何将多行数据合并成一行。

sql如何实现吧多条记录合成一条

2、创建一个名为WScore的表,用于保存武将的三围数据。执行以下语句:

CREATE TABLE WScore 

(

WName VARCHAR(20),     --姓名

Subject VARCHAR(20),  --属性

Score INT             --属性值   

);

sql如何实现吧多条记录合成一条

3、接着往WScore表插入一些武将的数据。执行以下语句:

INSERT INTO WScore  VALUES('姜维','统率',90);

INSERT INTO WScore  VALUES('姜维','武力',88);

INSERT INTO WScore  VALUES('姜维','智力',91);

INSERT INTO WScore  VALUES('张郃','统率',91);

INSERT INTO WScore  VALUES('张郃','武力',89);

INSERT INTO WScore  VALUES('张郃','智力',69);

INSERT INTO WScore  VALUES('陆逊','统率',96);

INSERT INTO WScore  VALUES('陆逊','武力',69);

INSERT INTO WScore  VALUES('陆逊','智力',95);

sql如何实现吧多条记录合成一条

4、执行语句:select * from WScore 查看刚才插入的数据,可以看到武将的三围数据是按属性以多行的形式保存的,接下来要合并成每名武将将一行的形式。

sql如何实现吧多条记录合成一条

5、可以使用 Case when + group by 的组合来实现多行数据合并,执行以下语句按姓名汇总,可以看到每名武将都合并到一行数据里了。

SELECT WName AS '姓名',

MAX(CASE Subject WHEN '统率' THEN Score ELSE 0 END) AS '统率',

MAX(CASE Subject WHEN '武力' THEN Score ELSE 0 END) AS '武力',

MAX(CASE Subject WHEN '智力' THEN Score ELSE 0 END) AS '智力'

FROM WScore 

GROUP BY WName

sql如何实现吧多条记录合成一条

6、另外使用PIVOT方法也能实现多行合并的效果,执行如下语句,可以看到查询结果语句上步一样:

SELECT A.WName AS '姓名',a.统率,a.武力,a.智力

FROM WScore

PIVOT(MAX(Score) FOR Subject IN(统率,武力,智力)) AS A

sql如何实现吧多条记录合成一条

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢