| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 13349 人关注过本帖
标题:精典的SQL语句,推荐收藏
收藏  订阅  推荐  打印 
卜酷塔
Rank: 2
来自:魅力青岛
等级:ID已被封
威望:39
帖子:2571
积分:25715
注册:2004-6-12
精典的SQL语句,推荐收藏

在网上经常转,常常看到有些人为了求得某些SQL语句而焦头烂额,现在我特别把自己收藏的一些比较精典的SQL拿出来和大家分享一下

1. 行列转换--普通

假设有张学生成绩表(CJ)如下 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82

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

declare @sql varchar(4000) 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)

2. 行列转换--合并

有表A, id pid 1 1 1 2 1 3 2 1 2 2 3 1 如何化成表B: id pid 1 1,2,3 2 1,2 3 1

创建一个合并的函数 create function fmerg(@id int) returns varchar(8000) as begin declare @str varchar(8000) set @str='' select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1) return(@str) End go

--调用自定义函数得到结果 select distinct id,dbo.fmerg(id) from 表A

3. 如何取得一个数据表的所有列名

方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。 SQL语句如下: declare @objid int,@objname char(40) 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

是不是太简单了? 呵呵 不过经常用阿.

4. 通过SQL语句来更改用户的密码

修改别人的,需要sysadmin role EXEC sp_password NULL, 'newpassword', 'User'

如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa

5. 怎么判断出一个表的哪些字段不允许为空?

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename

6. 如何在数据库里找到含有相同字段的表? a. 查已知列名的情况 SELECT b.name as TableName,a.name as columnname From syscolumns a INNER JOIN sysobjects b ON a.id=b.id AND b.type='U' AND a.name='你的字段名字'

b. 未知列名查所有在不同表出现过的列名 Select o.name As tablename,s1.name As columnname From syscolumns s1, sysobjects o Where s1.id = o.id And o.type = 'U' And Exists ( Select 1 From syscolumns s2 Where s1.name = s2.name And s1.id <> s2.id )

7. 查询第xxx行数据

假设id是主键: select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id) 如果使用游标也是可以的 fetch absolute [number] from [cursor_name] 行数为绝对行数

8. SQL Server日期计算 a. 一个月的第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) b. 本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) c. 一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) d. 季度的第一天 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) e. 上个月的最后一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) f. 去年的最后一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) g. 本月的最后一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) h. 本月的第一个星期一 select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ), 0) i. 本年的最后一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。

感谢那些网上提供相关SQL的作者

搜索更多相关主题的帖子: SQL语句  物理  数学  精典  李四  
2005-4-9 11:40
fokin
Rank: 2
等级:注册会员
帖子:49
积分:590
注册:2005-3-25

还不错!!~~~

我不是高手,我只是新手~!!
2005-4-13 10:54
EA_Games
Rank: 4
等级:高级会员
威望:6
帖子:539
积分:5990
注册:2005-3-13

不错不错。对新手很有帮助。

2005-4-14 19:18
suyongtao
Rank: 12Rank: 12Rank: 12
等级:版主
威望:29
帖子:8462
积分:85520
注册:2004-11-6

不错,,

[GLOW=255,red,2] 我的C#群34769739 我的北京交友群1295648[/GLOW]
2005-6-6 09:42
光明之子
Rank: 1
等级:新手上路
帖子:31
积分:410
注册:2004-11-8

一般拉,我好多都见过的!

2005-6-8 16:11
刹那
Rank: 1
等级:新手上路
帖子:29
积分:390
注册:2004-10-11

不错的

当爱已成往事....
2005-6-10 10:47
我心依旧
Rank: 1
等级:新手上路
帖子:1
积分:110
注册:2005-6-10

想加你QQ做个朋友,以后多沟通沟通
2005-6-10 20:54
极速尽
Rank: 2
等级:注册会员
帖子:59
积分:690
注册:2005-8-13

看的我晕……我真是新的不能再新的新人啊……

2005-8-13 11:04
gaofangtao
Rank: 2
等级:注册会员
帖子:128
积分:1382
注册:2005-4-7

不错,很好,加油

我相信我的付出
2005-8-15 00:17
yichen
Rank: 3Rank: 3
等级:中级会员
帖子:303
积分:3180
注册:2005-3-9

学习就是靠总结的么!

衣带渐宽终不悔, 为伊消得人憔悴。 纸上得来终觉浅, 绝知此事要躬行。
2005-8-16 18:22
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.064558 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved