交叉表例項

2022-02-13 00:30:34 字數 2994 閱讀 2541

--create table test ( id int  identity (1,1),names nvarchar (50),subject nvarchar (50),source decimal(18, 0) )

insert into [test] ([names],[subject],[source]) values (n'張三',n'語文',60)

insert into [test] ([names],[subject],[source]) values (n'李四',n'數學',70)

insert into [test] ([names],[subject],[source]) values (n'王五',n'英語',80)

insert into [test] ([names],[subject],[source]) values (n'王五',n'數學',75)

insert into [test] ([names],[subject],[source]) values (n'王五',n'語文',57)

insert into [test] ([names],[subject],[source]) values (n'李四',n'語文',80)

insert into [test] ([names],[subject],[source]) values (n'張三',n'英語',100)

select * from test;

select names,

--動態交叉表

declare @sql varchar(8000)

set @sql = 'select names,'

select @sql = @sql + 'sum(case subject when '''+subject+''' then source else null end) as '''+subject+''','

from (select distinct subject from test) as a

print @sql;

select @sql = left(@sql,len(@sql)-1) + 'from test group by names'

print @sql;

exec(@sql)

create table 表1(組名 varchar(10),成員1id varchar(10),成員2id varchar(10),成員3id varchar(10))

--插入資料

insert into 表1

select '衝鋒組','1','2','3' union

select '後衛組','2','3','4'

select * from 表1

create table 表2(成員id varchar(10),成員姓名 varchar(10))

--插入資料

insert into 表2

select '1','張三' union

select '2','李四' union

select '3','王五' union

select '4','陸二'

--測試語句

select a.組名,

成員1=(select 成員姓名 from 表2 b where a.成員1id=b.成員id),

成員1=(select 成員姓名 from 表2 b where a.成員2id=b.成員id),

成員1=(select 成員姓名 from 表2 b where a.成員3id=b.成員id)

from 表1 a

select 表1.組名, (select 表1.成員姓名 from 表2 b where 表1.成員1id=表2.成員id) as 成員1id,

(select 表1.成員姓名 from 表2 b where 表1.成員2id=表2.成員id) as 成員2id,

(select 表1.成員姓名 from 表2 b where 表1.成員3id=表2.成員id) as 成員3id

from 表1,表2

create table tt

(id int primary key  identity(1,1),

week varchar(50),

sday varchar(50),

people varchar(50)

)insert into tt values('周一','上午','李四')

insert into tt values('周一','下午','gg')

insert into tt values('周二','上午','33')

insert into tt values('周二','下午','55')

select *from tt;

select a.week as 星期, 上午 = max(case  when a.sday ='上午' then a.people else null end ),下午= max(case when a.sday='下午' then a.people else null end )from tt a   group by a.week

create table  score (

姓名 varchar(50) ,

課程 varchar(50),

分數 int 

)insert into score values('張三','語文',74) 

insert into score values('張三','數學',83) 

insert into score values('張三','物理',93) 

insert into score values('李四','語文',74) 

insert into score values('李四','數學',84) 

insert into score values('李四','物理',94) 

select * from score;

select * from score pivot(max(分數) for 課程 in (語文,數學,物理))a; 

交叉表例項

建表 在查詢分析器裡執行 create table test id int identity 1,1 not null name nvarchar 50 collate chinese prc ci as null subject nvarchar 50 collate chinese prc ci...

SQL交叉表的例項

很簡單的乙個東西,見網上好多朋友問 怎麼實現交叉表?以下是我寫的乙個例子,資料庫基於sql server 2000。交叉表例項 建表 在查詢分析器裡執行 create table test id int identity 1,1 not null name nvarchar 50 collate c...

詳細介紹SQL交叉表的例項

資料庫基於sql server 2000。交叉表例項 建表 在查詢分析器裡執行 create table test id int identity 1,1 not null name nvarchar 50 collate chinese prc ci as null subject nvarcha...