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

本文介绍如何将简单的课程安排数据通过SQL语句转换为更直观的表格形式,包括使用group by + case when方法及MSSQL的PIVOT函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

行专列

教师号  星期号 是否有课  

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值