行列转换普通
假设有张学生成绩表(CJ)如下
NameSubject Result
张三语文
张三数学
张三物理
李四语文
李四数学
李四物理
想变成
姓名 语文 数学 物理
张三
李四
declare @sql varchar()
set @sql = select Name
select @sql = @sql + sum(case Subject when +Subject+ then Result end) [+Subject+]
from (select distinct Subject from CJ) as a
select @sql = @sql+ from test group by name
exec(@sql)
行列转换合并
有表A
id pid
如何化成表B:
id pid
创建一个合并的函数
create function fmerg(@id int)
returns varchar()
as
begin
declare @str varchar()
set @str=
select @str=@str++cast(pid as varchar) from 表A where id=@id
set @str=right(@strlen(@str))
return(@str)
End
go
调用自定义函数得到结果
select distinct iddbofmerg(id) from 表A
如何取得一个数据表的所有列名
方法如下先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID然后再SYSCOLUMN表中取得该数据表的所有列名
SQL语句如下
declare @objid int@objname char()
set @objname = tablename
select @objid = id from sysobjects where id = object_id(@objname)
select Column_name = name from syscolumns where id = @objid order by colid
是不是太简单了? 呵呵 不过经常用阿
通过SQL语句来更改用户的密码
修改别人的需要sysadminrole
EXECsp_passwordNULLnewpasswordUser
如果帐号为SA执行EXECsp_passwordNULLnewpasswordsa
怎么判断出一个表的哪些字段不允许为空?
selectCOLUMN_NAMEfromINFORMATION_SCHEMACOLUMNSwhereIS_NULLABLE=NOandTABLE_NAME=tablename
如何在数据库里找到含有相同字段的表?
a 查已知列名的情况
SELECTbnameasTableNameanameascolumnname
FromsyscolumnsaINNERJOINsysobjectsb
ONaid=bid
ANDbtype=U
ANDaname=你的字段名字
b 未知列名查所有在不同表出现过的列名
SelectonameAstablenamesnameAscolumnname
Fromsyscolumnsssysobjectso
Wheresid=oid
Andotype=U
AndExists(
SelectFromsyscolumnss
Wheresname=sname
Andsid<>sid
)
查询第xxx行数据
假设id是主键
select*
from(selecttopxxx*fromyourtable)aa
wherenotexists(selectfrom(selecttopxxx*fromyourtable)bbwhereaaid=bbid)
如果使用游标也是可以的
fetchabsolute[number]from[cursor_name]
行数为绝对行数
SQL Server日期计算
a 一个月的第一天
SELECTDATEADD(mmDATEDIFF(mmgetdate()))
b 本周的星期一
SELECTDATEADD(wkDATEDIFF(wkgetdate()))
c 一年的第一天
SELECTDATEADD(yyDATEDIFF(yygetdate()))
d 季度的第一天
SELECTDATEADD(qqDATEDIFF(qqgetdate()))
e 上个月的最后一天
SELECTdateadd(msDATEADD(mmDATEDIFF(mmgetdate())))
f 去年的最后一天
SELECTdateadd(msDATEADD(yyDATEDIFF(yygetdate())))
g 本月的最后一天
SELECTdateadd(msDATEADD(mmDATEDIFF(mgetdate())+))
h 本月的第一个星期一
selectDATEADD(wkDATEDIFF(wk
dateadd(dddatepart(daygetdate())getdate())))
i 本年的最后一天
SELECTdateadd(msDATEADD(yyDATEDIFF(yygetdate())+))