随笔分类 -  MS SQL Server

上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 29 下一页
摘要:外联接 LEFT OUTERJOIN,其中关键词OUTER是可选的。LEFT JOIN是表示列出左表所有记录,右表没有匹配的列使用NULL作为占有符。演示例子,两张表来自http://www.cnblogs.com/insus/articles/1977561.html这里的[Machine]表和[Job]表。例子演示,取得所有分配有工单和没有分配工作单的机器记录:View Code SELECTM.[M_Id],J.[J_Id],[MachineName],[LineName],[JobNumber],[J_Date]FROM[dbo].[Machine]ASMLEFTOUTERJOIN-- 阅读全文
posted @ 2011-03-08 19:40 Insus.NET 阅读(630) 评论(0) 推荐(2) 编辑
摘要:内联接JOIN,从两个或多个有关联的表取得更详尽的信息。内联接的逻辑为先对这两张时行笛卡尔积运算,再根据指定谓词对结果进行过滤。为了演示,下面只实现两张表, 一张表[Machine],其中主键为[M_Id];另一张表[Job],此表的主键[J_Id]和外键[M_Id]即是表[Machine]的主键。[Machine]表: M_IdMachineNameLineNameIsActive1341MP36L311342B288L211344LC57L411345QT43L61[Job]表: J_IdM_IdJobNumberJ_Date1134423063/2/20112134423523/3/20 阅读全文
posted @ 2011-03-08 19:19 Insus.NET 阅读(593) 评论(0) 推荐(1) 编辑
摘要:参考:http://topic.csdn.net/u/20110305/17/885967de-1af4-4fb0-af95-b9a3f408a788.html?73823对于这个非标准要求,也许日后维护与扩展会带来更多困难。如果一定要求这样,Insus.NET的做法,只好写一个函数,整个专案中,需要地方,调用这个自定义函数即可。View Code CREATEFUNCTION[dbo].[udf_GetMyDate](@DateDATETIME)RETURNSNVARCHAR(30)ASBEGINIF@DateISNULLSET@Date=CURRENT_TIMESTAMP;DECLARE@ 阅读全文
posted @ 2011-03-05 19:25 Insus.NET 阅读(631) 评论(1) 推荐(2) 编辑
摘要:前面几个例子:http://www.cnblogs.com/insus/articles/1969896.htmlhttp://www.cnblogs.com/insus/articles/1970577.htmlhttp://www.cnblogs.com/insus/articles/1970707.html全是SQL Server行列转换或是列行转换的相关例子。不过在SQL Server2005版本开始,有一个新的函数PIVOT()可以很轻易实现这些功能。参考下面代码:View Code SELECT[RId],[2011-01-23],[2011-01-24],[2011-01-25] 阅读全文
posted @ 2011-03-05 10:57 Insus.NET 阅读(1496) 评论(1) 推荐(3) 编辑
摘要:参考前一个例子http://www.cnblogs.com/insus/articles/1969896.html,现想使用另外一种方式来处理行列转换,实现下面效果:参考代码:View Code BEGINIFOBJECT_ID('[dbo].[#t]')ISNOTNULLDROPTABLE[dbo].[#t]CREATETABLE[dbo].[#t](idINTIDENTITY(1,1),--产生唯一字段,稍后为循环使用RIdNVARCHAR(2),DTDATE,HitsINT)--把需要处理的数据记录预存入这个临时表中INSERTINTO[dbo].[#t]SELECT[R 阅读全文
posted @ 2011-03-04 12:04 Insus.NET 阅读(733) 评论(0) 推荐(2) 编辑
摘要:参考前一个SQL的行列转换例子http://www.cnblogs.com/insus/articles/1969896.html ,觉得不够自由,需要去预先知道记录的内容去定义行或列。下面这个方法,是Insus.NET常用一种处理方案,为数据量较少而准备。代码比较长,基本上写有说明,理解起来,一般不会有多大困难。代码如下:View Code --由于原记录表没有一个唯一主键,只好新建一个临时表,把需要处理的记录先预存入这个临时表中BEGINIFOBJECT_ID('[dbo].[#t]')ISNOTNULLDROPTABLE[dbo].[#t]CREATETABLE[dbo] 阅读全文
posted @ 2011-03-04 10:51 Insus.NET 阅读(815) 评论(0) 推荐(2) 编辑
摘要:报表显示需求,查询结果往往需要做一些行列转换或列行转换来显示。就以http://www.cnblogs.com/insus/articles/1968148.html这个例子的数据源做演示。正常查询结果显示和执行结果,如下:SELECT[RId],[DT],[Hits]FROM[dbo].[RecordHits]下面演示,把[RId]和[DT]作为列显示:View Code SELECT[RID],SUM(CASEWHEN[DT]='2011-01-23'THEN[Hits]END)AS'2011-01-23',SUM(CASEWHEN[DT]='201 阅读全文
posted @ 2011-03-03 14:28 Insus.NET 阅读(1844) 评论(0) 推荐(2) 编辑
摘要:在开发SQL时,少不了使用别名(Alias),有Column(字段)别名或Table(表)别名。使用别名,是为了简单易懂。别名一般放在AS关键词后,也可省略此关键词。参考下面例子:http://www.cnblogs.com/insus/articles/1968173.htmlhttp://www.cnblogs.com/insus/articles/1900559.htmlhttp://www.cnblogs.com/insus/articles/1900526.htmlhttp://www.cnblogs.com/insus/articles/1952470.htmlhttp://www 阅读全文
posted @ 2011-03-01 19:53 Insus.NET 阅读(468) 评论(0) 推荐(2) 编辑
摘要:SQL AND关键字,可以查询到两个或两个以上条件同时为TRUE的记录。以http://www.cnblogs.com/insus/articles/1968148.html为数据源,做演示:View Code SELECT[RId],[DT],[Hits]FROM[dbo].[RecordHits]WHERE[RId]='R2'AND[DT]='2011-01-25'执行结果: 阅读全文
posted @ 2011-03-01 19:36 Insus.NET 阅读(213) 评论(0) 推荐(2) 编辑
摘要:关键字OR,可应用在条件子句WHERE中,查询两个或以上不同条件。演示,数据来源,参考http://www.cnblogs.com/insus/articles/1968148.html,查询出日期为'2011-01-23'或者为'2011-01-26'的记录:View Code SELECT[RId],[DT],[Hits]FROM[dbo].[RecordHits]WHERE[DT]='2011-01-23'OR[DT]='2011-01-26'执行结果: 阅读全文
posted @ 2011-03-01 18:45 Insus.NET 阅读(283) 评论(0) 推荐(2) 编辑
摘要:DISTINCT关键字主要用来从SELECT语句的结果集中过滤掉重复的记录。演示,演示数据来源http://www.cnblogs.com/insus/articles/1968148.htmlSELECTDISTINCTRIdFROM[dbo].[RecordHits]结果: 阅读全文
posted @ 2011-03-01 18:00 Insus.NET 阅读(305) 评论(0) 推荐(2) 编辑
摘要:HAVING子句,是对合计函数进行条件过滤。就以这个http://www.cnblogs.com/insus/articles/1968148.html准备的数据为例。查询出这些天来,每天记录和大于等于140次的日期。View Code SELECT[DT],SUM([Hits])AS[TotalHits]FROM[dbo].[RecordHits]GROUPBY[dt]HAVINGSUM([Hits])>=140执行结果: 阅读全文
posted @ 2011-03-01 17:21 Insus.NET 阅读(624) 评论(0) 推荐(2) 编辑
摘要:前段时间,有举过一些函数例子,如SUM,COUNT,MAX,MIN,AVG,当我们调用这些函数进行运算,再想对这些运算结果进行分组,那得需使用GROUP BY来实现。下面先准备一些数据。创建一个表[RecordHits],并填充一些数据:View Code CREATETABLERecordHits(RIdNVARCHAR(2),DTDATE,HitsINT)GOINSERTINTO[dbo].[RecordHits]VALUES('R1','2011-01-23',30),('R2','2011-01-23',33),(' 阅读全文
posted @ 2011-03-01 16:56 Insus.NET 阅读(861) 评论(0) 推荐(2) 编辑
摘要:以前C#开发过程中,处理错误常会使用TRY...CATH。SQL Server新版本中(2005或更后)也提供有此处理逻辑错误的结构。可参考下面语法:BEGINTRY--此处写T-SQL代码ENDTRYBEGINCATCH--此处写Error处理代码。ENDCATCH演示,使用http://www.cnblogs.com/insus/articles/1929921.html这个约束,性别字段只能输入1至3整型数值,下例尝试输入一个非此规则的数值,比如输入5:BEGINTRYINSERT[dbo].[Users]VALUES('Insus.NET',5);ENDTRYBEGIN 阅读全文
posted @ 2011-02-25 19:22 Insus.NET 阅读(442) 评论(0) 推荐(2) 编辑
摘要:把下面这个例子http://www.cnblogs.com/insus/articles/1962609.html,改用传入参数。参考:DECLARE@sexINT=2;--1:femal;2:maleWITHMaleEmpAS(SELECT*FROM[Employee]WHERE[SexId]=@sex)SELECT*FROMMaleEmp; 阅读全文
posted @ 2011-02-23 20:22 Insus.NET 阅读(518) 评论(0) 推荐(2) 编辑
摘要:重构目标例子:http://www.cnblogs.com/insus/articles/1961688.htmlSELECT语句中需要使用到别名,<column> OR <expression> AS <column_alias>。重构后的代码,请参考:WITHASYAS(SELECTYEAR(birthday)AS[Year],[Salary]FROM[dbo].[Member])SELECT[Year],AVG([Salary])AS[AvgSalary]FROMASYGROUPBY[YEAR] 阅读全文
posted @ 2011-02-23 20:15 Insus.NET 阅读(271) 评论(0) 推荐(2) 编辑
摘要:CTE(Common table expression),是ANSI SQL(1999及以后版本)标准的一部分。定义CTE时,是使用T-SQL的WITH来定义的。有一点需要注意的就是定义结束时,必须使用分号(;)结束。例子(查询男雇员):WITHMaleEmpAS(SELECT*FROM[Employee]WHERE[SexId]=2--1:femal;2:male)SELECT*FROMMaleEmp; 阅读全文
posted @ 2011-02-23 20:03 Insus.NET 阅读(420) 评论(0) 推荐(2) 编辑
摘要:按照SQL的逻辑查询处理顺序,Group BY子句是先于SELECT子句处理。平时写法(YEAR(birthday)):Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->SELECTYEAR(birthday)AS[Year],AVG([Salary])AS[AvgSalary]FROM[dbo].[Member]GROUPBYYEAR(birthday)只能使用SELECT一样的写法。是否可以在GROUP BY中使用SELECT阶段的名别呢, 阅读全文
posted @ 2011-02-22 21:09 Insus.NET 阅读(472) 评论(0) 推荐(2) 编辑
摘要:PUR需求在Syteline system 做一份报表,By采购单收货的记录报表。实现时需要从三个表关联[matltran],[poitem] 和[vendaddr]去实现。详细存储过程,参考如下代码:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATEPROCEDURE[dbo].[usp_SyteLine_GetReceivingByPORepo 阅读全文
posted @ 2011-02-22 11:20 Insus.NET 阅读(499) 评论(0) 推荐(2) 编辑
摘要:派生表也称作表子查询是表表达式的一种。派生表的查询语句写在一对小括号"()"中,后面还需要使用AS定义一个别名。例如,找出广东省的城市:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->SELECT*FROM(SELECT*FROMCityWHEREProvinceId=19)AsCity_Of_GuangDong执行结果(部分):CityIdProvinceIdCityNameZipCode19719广州市51000019 阅读全文
posted @ 2011-02-21 21:12 Insus.NET 阅读(314) 评论(0) 推荐(2) 编辑

上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 29 下一页