精典SQL FAQ收藏

在网上经常转,常常看到有些人为了求得某些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 aselect @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)asbegindeclare @str varchar(8000)set @str=''select @str=@str+','+cast(pid as varchar) from 表A where id=@idset @str=right(@str,len(@str)-1)return(@str)Endgo

--调用自定义函数得到结果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的作者

时间: 2024-12-26 08:53:09

精典SQL FAQ收藏的相关文章

SQl语句收藏

/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES --

常用精典sql语句集合

SQL: select * into b from a where 1<>1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) SQL: insert into b(a, b, c) select d,e,f from b; 说明:显示文章.提交人和最后回复时间   SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.

关于sql server查询语句的写法。

问题描述 关于sql server查询语句的写法. 怎样写一个查询语句select distinct ID from TrainTime order by ID select Station from TrainTime where S_No='1'order by ID select Stationfrom TrainTime where D_Time='-' order by ID 怎样把这3个查询语句写为一句啊,让查询查来的结果为这3列数据. 因为我想建一个表,为3列,列名为:列车车次.起

引用:初探Sql Server 执行计划及Sql查询优化

原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之----探索MSSQL执行计划   作者:no_mIss   最近总想整理下对MSSQL的一些理解与感悟,却一直没有心思和时间写,晚上无事便写了一篇探索MSSQL执行计划,本文讲执行计划但不仅限于讲执行计划.   网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出仅几S甚

常用的fso操作通用函数

fso|函数 以下是几则在ASP中经常应用到FSO操作函数,实用精典,推荐收藏! <% '功能:判断文件名是否合法 'isFileName [filename] '文件名不能包含下列任何字符之一 ' \ / : * ? " < > | Function isFileName(sFileName) Dim sErrorStr, i isFileName = TRUE sErrorStr = Array("\", "/", ":&q

分别用java Application 及 JSP调用javaBean的例子

application|js //java bean//file name: faq.javaimport java.sql.*; public class faq {    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";    String sConnStr = "jdbc:odbc:faq";    Connection conn = null;    ResultSet rs = null;     pub

asp过滤换行、过滤tab及过滤回车函数

过滤掉字符中所有的tab和回车和换行.通常用于小偷或采集程序,函数精典实用,收藏必备. Public Function ReplaceTrim(ByVal strContent)         On Error Resume Next         Dim re         Set re = New RegExp         re.IgnoreCase = True         re.Global = True         re.Pattern = "(" &

asp取得数组中的最大值

数组|最大值 如何取得数组中的最大值(由71port_80端口提供)  该函数的作用是取得一组数组中最大的一个值,非常实用且精典,值得收藏! snum="345,231,56,786,1100,356,1200,300,685,111,134,765" function GetMax(str)num=split(str,",")max=num(0)for ii=0 to ubound(num)if cint(num(ii))>cint(max) then ma

mysql远程访问权限配置方法详解

例子一  代码如下 复制代码 grant all privileges on wxtest.* to root175@111.34.73.175 identified by '11111' 增加一个root175用户,密码为11111,只能在111.34.73.175上登录,并对数据库wxtest有查询,增加,修改和删除的功能.需要在mysql的root用户下进行执行,这个如果以这个用户登录的话是只能看到wxtest这个表的  代码如下 复制代码 flush privileges; 刷新权限操作