寫一條SQL語句將表一的資料轉換成表二的樣子

2021-03-06 18:17:33 字數 2549 閱讀 6000

1樓:謝新林

select country, sum(case when type='a' then money end) as a,

sum(case when type='b' then money end) as b,

sum(case when type='c' then money end) as c

from table1

group by country

2樓:匿名使用者

這是我以前給他們做的一個行專列的例子,你可以參考一下:

/*學生表:member

欄位名稱 資料型別 說明

mid char(10) 學生號,主鍵

mname char(50) 姓名

課程表class:

欄位名稱 資料型別 說明

fid char(10) 課程,主鍵

fname char(50) 課程名

成績表:score

欄位名稱 資料型別 說明

sid int 自動編號,主鍵,成績記錄號

fid char(10) 課程號,外來鍵

mid char(10) 學生號,外來鍵

score int 成績*/

create table member(mid varchar(10) primary key,mname varchar(50))

create table class(fid varchar(10) primary key,fname varchar(50))

create table score(sid int primary key,fid varchar(10),mid varchar(10),score int)

goinsert into member values ('1001','張三')

insert into member values ('1002','李四')

insert into class values ('a1','數學')

insert into class values ('a2','化學')

insert into class values ('a3','政治')

insert into class values ('a4','歷史')

insert into class values ('a5','語文')

insert into class values ('a6','物理')

insert into score values (1,'a1','1001',80)

insert into score values (2,'a1','1002',85)

insert into score values (3,'a2','1001',84)

insert into score values (4,'a4','1002',90)

godeclare @sql varchar(8000)

select @sql='select a.mname as 學生姓名'

select @sql=@sql+',sum(case c.fname when '''+fname+''' then b.score else null end )as '+fname from class

select @sql=@sql+' from member a left join score b on a.mid=b.mid left join class c on b.

fid=c.fid group by a.mname'

print @sql

exec (@sql)

3樓:

create table class([student] nvarchar(2),[course] nvarchar(2),[score] int)

insert class

select n'張三',n'語文',78 union all

select n'張三',n'數學',87 union all

select n'張三',n'英語',82 union all

select n'張三',n'物理',90 union all

select n'李四',n'語文',65 union all

select n'李四',n'數學',77 union all

select n'李四',n'英語',65 union all

select n'李四',n'物理',85

godeclare @s nvarchar(4000)

select @s=isnull(@s+',','')+quotename([course]) from class group by[course] --isnull(@s+',','') 去掉字串@s中第一個逗號

exec('select [student],'+@s+',[總成績] from (select *,[總成績]=sum([score])over(partition by [student]) from class) a

pivot (max([score]) for [course] in('+@s+'))b ')

求高手幫寫一條SQL語句

問題 假設有張學生成績表 tb 如下 姓名 課程 分數 張三 語文 74 張三 數學 83 張三 物理 93 李四 語文 74 李四 數學 84 李四 物理 94 想變成 得到如下結果 姓名 語文 數學 物理 李四 74 84 94 張三 74 83 93 create table tb 姓名 va...

跪求一條SQL語句

學生表 member 欄位名稱 資料型別 說明 mid char 10 學生號,主鍵 mname char 50 姓名 課程表class 欄位名稱 資料型別 說明 fid char 10 課程,主鍵 fname char 50 課程名 成績表 score 欄位名稱 資料型別 說明 sid int 自...

sql同一條資料多次插入,一條插入的SQL語句,資料庫卻產生兩條資料

create table x id int aa varchar 20 bb varchar 20 cc varchar 20 dd varchar 20 insert into x id,aa,bb,cc,dd values 1,x x x x insert into x id,aa,bb,cc,...