2014-7-26 sql 学习笔记——sql 行专列

来源:互联网 发布:淘宝手机版店招尺寸 编辑:程序博客网 时间:2024/04/30 12:33

行专列

教师号  星期号 是否有课  

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    #testGROUP 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


0 0
原创粉丝点击