SQL 收集

本文章很简单的讲述了关于SQL创建视图
方法,利用了一个简单的实例告诉你如何创建视图,有需要的朋友可以参考着来做。

假设有张学生成绩表(tb)如下: Name Subject Result 张三 语文 74 张三 数学
83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成 姓名 语文
数学 物理 ———- ———– ———– ———– 李四 74 84 94
张三 74 83 93 SQL 语句如下: 复制代码
代码如下: create table tb ( Name varchar(10) , Subject varchar(10) ,
Result int ) insert into tb(Name , Subject , Result) values(‘张三’ ,
‘语文’ , 74) insert into tb(Name , Subject , Result) values(‘张三’ ,
‘数学’ , 83) insert into tb(Name , Subject , Result) values(‘张三’ ,
‘物理’ , 93) insert into tb(Name , Subject , Result) values(‘李四’ ,
‘语文’ , 74) insert into tb(Name , Subject , Result) values(‘李四’ ,
‘数学’ , 84) insert into tb(Name , Subject , Result) values(‘李四’ ,
‘物理’ , 94) go –静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名, max(case Subject when ‘语文’ then result else 0 end)
语文, max(case Subject when ‘数学’ then result else 0 end) 数学,
max(case Subject when ‘物理’ then result else 0 end) 物理 from tb group
by name –动态SQL,指subject不止语文、数学、物理这三门课程。 declare @sql
varchar(8000) set @sql = ‘select Name as ‘ + ‘姓名’ select @sql = @sql +
‘ , max(case Subject when ”’ + Subject + ”’ then Result else 0 end)
[‘ + Subject + ‘]’ from (select distinct Subject from tb) as a set
@sql = @sql + ‘ from tb group by name’ exec(@sql)

–使用代码创建视图create view viewname –创建视图assql select statement

–修改表名称

例(1)

EXEC sp_rename 旧表名,新表名

Name Subject Result张三 语文 80张三 数学 90张三 物理 85李四 语文 85李四
数学 92李四 物理 82

–修改表字段名称

想变成 姓名 语文 数学 物理张三 80 90 85李四 85 92 82

EXEC sp_rename ‘表.旧字段’,’新字段’,’COLUMN’

代码如下复制代码

–修改表字段类型

declare @sql varchar(4000)set @sql = ‘create view [viewname] as select
Name’select @sql = @sql + ‘,sum(case Subject when ”’+Subject+”’ then
Result end) [‘+Subject+’]’from (select distinct Subject from CJ) as
aselect @sql = @sql+’ from CJ group by name’select @sqlexec(@sql)

alter table 表 alter column 字段 类型(如:int)

关于视图的其它操作

–查询当前数据库名

alter view viewname –修改视图assql select statement

select name from [master].[dbo].[sysdatabases] Where DbId=(Select
Dbid From [Master].[dbo].[SysProcesses] Where Spid = @@spid)

drop view viewname –删除视图

–查询表的字段

select * from Sys.syscolumns where id=object_id(‘表’)

–查询是否存在用户表

if exists(select * from sys.sysobjects where id=object_id(‘表名’) and
objectproperty(id,N’IsUserTable’)=1)

print ‘exists’

 

 

SQL语句之普通行列转换
    
      
  假设有张学生成绩表(tb_rowtocol)如下   
  Name   Subject   Result   
  张三   语文  73   
  张三   数学  83   
  张三   物理  93   
  李四   语文  74   
  李四   数学  84   
  李四   物理  94   
    
  想变成     
  姓名   语文   数学   物理   
  张三   73  83  93   
  李四   74  84  94   
    
  declare   @sql   varchar(4000)   
  set   @sql   =   ‘select   Name   as   ‘   +   ‘姓名’   
  select   @sql   =   @sql   +   ‘   ,   sum(case   Subject   when  
”’+Subject+”’   then   Result   end)   [‘+Subject+’]’   
  from   (select   distinct   Subject   from   rowtocol)   as   a   
  set   @sql   =   @sql   +   ‘   from   rowtocol   group   by   name’
  
  exec(@sql)     
      
  如果上述两表互相换一下:即   
  表名(cj)   
  姓名   语文   数学   物理   
  张三   73  83  93   
  李四   74  84  94   

发表评论

电子邮件地址不会被公开。 必填项已用*标注