行专列
教师号 星期号 是否有课
1 2 有
1 3 有
2 1 有
3 2 有`
1 2 有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
1 2 1
2 1
3 1
各星期下的数字表示:对应的教师在星期几已经排的课数
CREATE TABLE #test
(
teacher VARCHAR(20) ,
week VARCHAR(20) ,
class NUMERIC
) ;
INSERT INTO #test
( teacher ,
week ,
class
)
SELECT '1' ,
'星期二' ,
1
UNION ALL
SELECT '1' ,
'星期三' ,
1
UNION ALL
SELECT '2' ,
'星期一' ,
1
UNION ALL
SELECT '3' ,
'星期二' ,
1
UNION ALL
SELECT '1' ,
'星期二' ,
1 ;
方法一:使用grpup by + case when 的方法。
SELECT teacher ,
SUM(CASE week
WHEN '1' THEN 1
END) AS '星期一' ,
SUM(CASE week
WHEN '2' THEN 1
END) AS '星期二' ,
SUM(CASE week
WHEN '3' THEN 1
END) AS '星期三'
FROM #test
GROUP BY teacher
方法二:使用MS SQL 中 PIVOT 函数进行转换
SELECT teacher ,
[星期一],
[星期二],
[星期三]
FROM #test PIVOT ( SUM(class) FOR [week] IN ( [星期一], [星期二], [星期三] ) ) t ;
附件:
修改表结构语句:
增加字段:alter table 表名 add 列名 属性 删除字段:alter table 表名 drop column 列名 修改字段:alter table 表名 alter column 列名 set data type 属性 //修改字段只能对长度进行修改,不能改列名和数据类型 添加约束: 非空:alter table 表名 alter column 列名 set not null 主键:alter table 表名 add primary key(列名1,列名2。。。。) 外键:alter table 表名 add foreign key(列名)references 表名2(列名2) 唯一:alter table 表名 add unique(列名1,列名2。。。。) 检查:alter table 表名 add check(检查条件)
表的关联修改:update a set c=b.c,d.=b.d....--这里把你要修改的行自己补齐 from check as a inner join hearing as b on a.CASENO=b.CASENO and a.NAME=b.NAME