📄 sql语句精典收藏_mysky.htm
字号:
} } xhr.send(null);})();/*]]>*/</SCRIPT>
<META content="MSHTML 6.00.2900.3354" name=GENERATOR></HEAD>
<BODY onload=formatonlinpic();>
<CENTER>
<SCRIPT type=text/javascript>
/*<![CDATA[*/
if(top.location != self.location){
top.location = self.location;
}
var myref = encodeURI("http://hi.baidu.com/gallonchai/blog/item/d6ac291e91ffdaf61ad57631%2Ehtml");
/*]]>*/
</SCRIPT>
<LINK href="SQL语句精典收藏_MySky.files/mods.css" type=text/css rel=stylesheet><LINK
href="SQL语句精典收藏_MySky.files/bb792b3e6609c93d70cf6c0a.css" type=text/css
rel=stylesheet><LINK href="SQL语句精典收藏_MySky.files/space.css" type=text/css
rel=stylesheet>
<STYLE type=text/css>#usrbar {
PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FONT-SIZE: 12px; BACKGROUND: #ffffff; FILTER: alpha(opacity=65); PADDING-BOTTOM: 3px; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 19px; PADDING-TOP: 4px; FONT-FAMILY: Arial; LETTER-SPACING: normal; HEIGHT: 19px; TEXT-ALIGN: right; moz-opacity: 0.5
}
#usrbar A {
COLOR: #0000cc; TEXT-DECORATION: underline
}
#usrbar A:link {
COLOR: #0000cc; TEXT-DECORATION: underline
}
#usrbar A:visited {
COLOR: #0000cc; TEXT-DECORATION: underline
}
#ft {
CLEAR: both; FONT-SIZE: 12px; COLOR: #666666; LINE-HEIGHT: 20px; FONT-FAMILY: Arial; HEIGHT: 20px; TEXT-ALIGN: center
}
#ft A {
COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:link {
COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:visited {
COLOR: #7777cc; TEXT-DECORATION: underline
}
#usrbar {
LETTER-SPACING: normal
}
#usrbar A {
LETTER-SPACING: normal
}
#usrbar A:link {
LETTER-SPACING: normal
}
#usrbar A:visited {
LETTER-SPACING: normal
}
#ft {
LETTER-SPACING: normal
}
#ft A {
LETTER-SPACING: normal
}
#ft A:link {
LETTER-SPACING: normal
}
#ft A:visited {
LETTER-SPACING: normal
}
</STYLE>
<DIV id=usrbar><NOBR><A href="http://www.baidu.com/" target=_blank>百度首页</A> | <A
id=hi_index href="http://hi.baidu.com/" target=_blank>百度空间</A>
<SCRIPT type=text/javascript>
document.write('| <a href="http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u=http://hi.baidu.com' + encodeURI('/gallonchai/blog/item/d6ac291e91ffdaf61ad57631%2Ehtml') + '">登录</a>');
</SCRIPT>
</NOBR></DIV>
<DIV id=main align=left><!--[if IE]>
<SCRIPT>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style.width="772px"; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</SCRIPT>
<![endif]-->
<DIV id=header>
<DIV class=lc>
<DIV class=rc></DIV></DIV>
<DIV class=tit><A class=titlink
title="gallonchai的空间 http://hi.baidu.com/gallonchai"
href="http://hi.baidu.com/gallonchai">MySky</A></DIV>
<DIV class=desc>自由空间</DIV>
<DIV id=tabline></DIV>
<DIV id=tab><A href="http://hi.baidu.com/gallonchai">主页</A><A class=on
href="http://hi.baidu.com/gallonchai/blog">博客</A><A
href="http://hi.baidu.com/gallonchai/album">相册</A><SPAN>|</SPAN><A
href="http://hi.baidu.com/gallonchai/profile">个人档案</A> <SPAN>|</SPAN><A
href="http://hi.baidu.com/gallonchai/friend">好友</A> </DIV></DIV>
<DIV class=stage>
<DIV class=stagepad>
<DIV style="WIDTH: 100%">
<TABLE class=modth cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=modtl width=7> </TD>
<TD class=modtc noWrap>
<DIV class=modhead><SPAN class=modtit>查看文章</SPAN></DIV></TD>
<TD class=modtc noWrap align=right></TD>
<TD class=modtr width=7> </TD></TR></TBODY></TABLE>
<DIV class=modbox id=m_blog>
<DIV class=tit>SQL语句精典收藏</DIV>
<DIV class=date>2007-08-19 19:55</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt id=blog_text>
<P>SQL语句精典收藏</P>
<P><BR>1. 行列转换<BR>假设有张学生成绩表(CJ)如下<BR>Name
Subject Result<BR>张三
语文
80<BR>张三
数学
90<BR>张三
物理
85<BR>李四
语文
85<BR>李四
数学
92<BR>李四
物理 82</P>
<P>想变成 <BR>姓名
语文 数学 物理<BR>张三
80 90
85<BR>李四 85
92 82</P>
<P>解决如下<BR>declare @sql varchar(4000)<BR>set @sql = 'select
Name'<BR>select @sql = @sql + ',sum(case Subject when '''+Subject+''' then
Result end) ['+Subject+']'<BR>from (select distinct Subject from CJ) as
a<BR>select @sql = @sql+' from test group by name'<BR>exec(@sql)</P>
<P>另外在Access中还提供了TransForm来实现行列转换<BR>TRANSFORM count(Result) AS number
<BR>SELECT 姓名 <BR>FROM 学生成绩表 <BR>GROUP BY 姓名 <BR>PIVOT Subject;</P>
<P>TransForm
用法如下:<BR>=========================================================<BR>TRANSFORM
aggfunction <BR>selectstatement <BR>PIVOT pivotfield [IN (value1[,
value2[, ...]])]</P>
<P>TRANSFORM 语句可分为以下几个部分:</P>
<P>部分
描述 <BR>aggfunction 在选定数据上运作的 SQL 合计函数。 <BR>selectstatement
SELECT 语句。 <BR>pivotfield 在查询的结果集中创建列标题时用的字段或表达式。 <BR>value1, value2
用来创建列标题的固定值。</P>
<P>说明 <BR>使用交叉表查询来摘要数据时,从指定的字段或表达式中选定值作为列标题, <BR>这样,可以用比选定查询更紧凑的格式来观察数据。
<BR>TRANSFORM 是可选的,但在使用它时,要作为 SQL 字符串中的第一个语句。 <BR>它出现在 SELECT
语句(指定作为行标题的字段的)之前,还出现在 GROUP BY 子句 <BR>(指定行分组的)之前。可以有选择地包含其它子句,例如 WHERE
子句,它指定附 <BR>加的选择或排序条件。也可以将子查询当作谓词,特别是在叉表查询的 WHERE 子句中。</P>
<P>pivotfield 返回的值被用作查询结果集中的列标题。 <BR>例如,在交叉表查询中,将根据销售图表按销售月份创建 12 个列。
<BR>可以限制 pivotfield 用列在可选的 IN 子句中的固定值(value1, value2)来创建标题。
<BR>也可以用没有数据存在的固定值来创建附加的列。
<BR>==================================================================================</P>
<P>2. 列行转换<BR>暂时保留</P>
<P>3. 行列转换--加合并<BR>有表A,<BR>id pid<BR>1
1<BR>1 2<BR>1 3<BR>2
1<BR>2 2<BR>3 1<BR>如何化成表B:<BR>id
pid<BR> 1 1,2,3<BR> 2
1,2<BR> 3 1</P>
<P>创建一个合并的函数<BR>create function fmerg(@id int)<BR>returns
varchar(8000)<BR>as<BR>begin<BR>declare @str varchar(8000)<BR>set
@str=''<BR>select @str=@str+','+cast(pid as varchar) from 表A where <A
href="mailto:id=@id">id=@id</A><BR>set
@str=right(@str,len(@str)-1)<BR>return(@str)<BR>End<BR>go</P>
<P>--调用自定义函数得到结果<BR>select distinct id,dbo.fmerg(id) from 表A</P>
<P>4.
如何取得一个数据表的所有列名<BR>方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。<BR>SQL语句如下:<BR>declare
@objid int,@objname char(40)<BR>set @objname = 'tablename'<BR>select
@objid = id from sysobjects where id = object_id(@objname)<BR>select
'Column_name' = name from syscolumns where id = @objid order by colid</P>
<P>是不是太简单了? 呵呵 不过经常用阿.</P>
<P>5. 通过SQL语句来更改用户的密码</P>
<P>修改别人的,需要sysadmin
role <BR>EXEC sp_password
NULL, 'newpassword', 'User'</P>
<P>如果帐号为SA执行EXEC sp_password NULL,
'newpassword', sa </P>
<P>6.怎么判断出一个表的哪些字段不允许为空?</P>
<P>select COLUMN_NAME from
INFORMATION_SCHEMA.COLUMNS where
IS_NULLABLE='NO' and
TABLE_NAME=tablename </P>
<P>7.如何在数据库里找到含有相同字段的表?<BR>a. 查已知列名的情况<BR>SELECT
b.name as TableName,a.name
as columnname <BR>From
syscolumns a INNER
JOIN sysobjects
b <BR>ON
a.id=b.id <BR>AND
b.type='U' <BR>AND
a.name='你的字段名字' <BR>b. 未知列名查所有在不同表出现过的列名<BR>Select
o.name As tablename,s1.name
As columnname <BR>From
syscolumns s1, sysobjects
o <BR>Where s1.id =
o.id <BR> And o.type
= 'U' <BR> And
Exists
( <BR>
Select 1 From syscolumns
s2 <BR>
Where s1.name =
s2.name <BR>
And s1.id <>
s2.id <BR>
)<BR>8.查询第xxx行数据</P>
<P>假设id是主键: <BR>select
* <BR>from (select top
xxx * from yourtable)
aa <BR>where not
exists(select 1 from
(select top xxx-1 *
from yourtable) bb where
aa.id=bb.id)<BR>如果使用游标也是可以的 <BR>fetch
absolute [number] from
[cursor_name] <BR>行数为绝对行数</P>
<P>9.SQL Server日期计算<BR>a. 一个月的第一天<BR>SELECT
DATEADD(mm, DATEDIFF(mm,0,getdate()),
0) <BR>b. 本周的星期一<BR>SELECT DATEADD(wk,
DATEDIFF(wk,0,getdate()), 0) <BR>c.
一年的第一天<BR>SELECT DATEADD(yy,
DATEDIFF(yy,0,getdate()), 0) <BR>d.
季度的第一天<BR>SELECT DATEADD(qq,
DATEDIFF(qq,0,getdate()), 0) <BR>e. 上个月的最后一天
<BR>SELECT dateadd(ms,-3,DATEADD(mm,
DATEDIFF(mm,0,getdate()), 0)) <BR>f.
去年的最后一天<BR>SELECT dateadd(ms,-3,DATEADD(yy,
DATEDIFF(yy,0,getdate()), 0)) <BR>g.
本月的最后一天<BR>SELECT dateadd(ms,-3,DATEADD(mm,
DATEDIFF(m,0,getdate())+1, 0)) <BR>h.
本月的第一个星期一<BR>select DATEADD(wk,
DATEDIFF(wk,0, <BR>
dateadd(dd,6-datepart(day,getdate()),getdate()) <BR>
), 0) <BR>i.
本年的最后一天<BR>SELECT dateadd(ms,-3,DATEADD(yy,
DATEDIFF(yy,0,getdate())+1, 0))。</P>
<P></P></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章
href="http://hi.baidu.com/gallonchai/blog/category/Êý¾Ý¿â">类别:数据库</A> | <A
title=将此文章添加到百度搜藏 onclick="return addToFavor();"
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN
id=result></SPAN>) | <A
href="http://hi.baidu.com/gallonchai/blog/item/d6ac291e91ffdaf61ad57631.html#send">评论</A> (0)
<SCRIPT language=javascript>/*<![CDATA[*/var pre = [true,'ADO代码连接远程SQLServer数据库', 'ADO代码连接远程SQLServer数据库','/gallonchai/blog/item/7c9a4fd5ebb109c650da4b34.html'];var post = [true,'判断网络是否连通,以及使用什么方法连接到Internet','判断网络是否连通,以及使用什么...', '/gallonchai/blog/item/7ddd5b24158d0c31c89559ff.html'];if(pre[0] || post[0]){ document.write('<div style="height:5px;line-height:5px;"> </div><div id="in_nav">'); if(pre[0]){ document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' + pre[2] + '</a> '); } if(post[0]){ document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' + post[2] + '</a>'); } document.write('</div>');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -