以前写报表的时候,数据都是强哥写好的,我也是偶尔闲着会看看sql语句,一大堆的存储过程,(*&&……%%
这次强哥说,以后数据有我来写,0_0
其实今天天气挺好的,不过,看代码看得我浑身发热,老是冒汗,很明显,我看不太懂,
一段一段的百度,请教同事,现在终于明白了20% \(^o^)/
1 isNULL()函数用法
语法 ISNULL ( check_expression , replacement_value )
检查指定的字段
使用指定的替换值替换 NULL。
这一句代码,就很明确了:
h.pc_qty - ISNULL(tsq.total_ship_qty, 0) os_balance,
2 pivot () 这个函数的意思是:变行为列,变列为行
3 dateadd() 在日期中添加或减少制定的时间间隔
datepart 返回日期或时间的单独部分,比如,年月日,时,分,秒
set @startweek = dateadd( day, case when 6-datepart(dw,@today) < 0 then 6 else 6-datepart(dw,@today) end, @today)
OrderId | ProductName | OrderDate |
---|---|---|
1 | 'Computer' | 2008-12-29 16:25:46.635 |
SELECTDATEPART(yyyy,OrderDate)
AS OrderYear,DATEPART(mm,OrderDate)
AS OrderMonth,DATEPART(dd,OrderDate)
AS OrderDay FROM Orders WHERE OrderId=1
结果:
OrderYear | ||
---|---|---|
2 |
12 29
4 with nolock
from AX2009DEV.dbo.wmsshipment a with (nolock)
所有Select加 With (NoLock)解决阻塞死锁
处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST 。有关 NOLOCK 和 READPAST的一些技术知识点:
对于非银行等严格要求事务的行业,搜索记录中出现或者不出现某条记录,都是在可容忍范围内,所以碰到死锁,应该首先考虑,我们业务逻辑是否能容忍出现或者不出现某些记录,而不是寻求对双方都加锁条件下如何解锁的问题。
NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。但是这时候一定要注意NOLOCK 和 READPAST的局限性,确认你的业务逻辑可以容忍这些记录的出现或者不出现:
简单来说:
NOLOCK 可能把没有提交事务的数据也显示出来.
READPAST 会把被锁住的行不显示出来
什么内连接,左连接 做一个小练习均可
drop table a
create table a (
id int primary key identity(1,1) ,
value varchar(30)
)
insert into a values('bo')
drop table b
create table b (
id int primary key identity(1,2),
value varchar(30)
)
insert into b values('we')
drop table c
create table c (
id int primary key identity(1,2),
value varchar(30)
)
insert into c values('s')
select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid
select a1.*,b1.*,c1.* from (a a1 left join b b1 on a1.id = b1.id)left join c c1 on a1.id = c1.id
select * from a
select * from b
select * from c
select * from a join b on a.id = b.id
select a.id,a.value,b.id,b.value from a join b on a.id = b.id join c on c.id = a.id
左连接:以左边表格为基准 比如a left join b
b表中不存在的数据以null来代替
-- 臨時表的創建 添加及查詢
drop table #Temp
create table #Temp(
id int identity(1,1),
value varchar(30)
)
insert into #Temp values('qiqi')
select * from #Temp
truncate table #Temp --清空臨時表所有數據和約束