随笔分类 -  SQL

SQL
摘要:场景:返回每个客户最近的3个订单。 假设我们已经有一个POC索引(详情见http://www.cnblogs.com/xiaopotian/p/6821502.html),有两种策略来完成该任务:一种是使用ROW_NUMBER函数;另一种使用APPLY运算符和OFFSET/FETCH或TOP,哪一种 阅读全文
posted @ 2017-05-12 17:26 小破天 阅读(694) 评论(0) 推荐(0) 编辑
摘要:这个问题的根源在于null,众所周知,当判断一个值是否为null的时候,sql server要用is null 或者is not null, 在SQL Server中,Null值并不是一个值,而是表示特定含义,其所表示的含义是“Unknow”,可以理解为未定义或者未知,因此任何与Null值进行比对的 阅读全文
posted @ 2017-05-08 18:34 小破天 阅读(5224) 评论(0) 推荐(0) 编辑
摘要:---游标循环遍历-- begin declare @id int,@temp int,@error int set @error=0 begin tran --申明事务 --业务-- update SmartPromoter set CustomerID=a.ID from SmartCustomer a,SmartPromoter b where (a.Mob... 阅读全文
posted @ 2017-05-08 16:02 小破天 阅读(454) 评论(0) 推荐(0) 编辑
摘要:最近在看窗口函数,接触到了POC索引,所以借此机会好好研究一下索引。 一般支持窗口函数的索引指南都遵循POC的概念,也就是Partitioning(分区)、Ordering(排序)和Covering(覆盖)的简称,有时也称为POCo。POC索引的键应该是窗口分区列紧接着窗口的排序,索引还应包含查询引 阅读全文
posted @ 2017-05-07 17:39 小破天 阅读(704) 评论(0) 推荐(0) 编辑
摘要:透视是一种通过聚合和旋转把数据行转换成数据列的技术。当透视数据时,需要确定三个要素:要在行(分组元素)中看到的元素,要在列(扩展元素)上看到的元素,要在数据部分看到的元素(聚合元素)。 SQL Server数据库中,PIVOT在帮助中这样描述滴:可以使用 PIVOT 和UNPIVOT 关系运算符将表 阅读全文
posted @ 2017-05-06 18:51 小破天 阅读(3372) 评论(0) 推荐(0) 编辑
摘要:这个应用场景也不多说了 利用row_number()跟rank()也可以, 阅读全文
posted @ 2017-05-06 16:42 小破天 阅读(258) 评论(0) 推荐(0) 编辑
摘要:分页的场景就不多说了,无处不在。 方法一:利用row_number() 如果有索引支持row_number()的计算,SQL server不需要扫描表中的所有的行,只需要扫面前20行,然后进行筛选。 方法二:2012以后的新特性,利用offset/fetch进行筛选。 阅读全文
posted @ 2017-05-06 16:13 小破天 阅读(286) 评论(0) 推荐(0) 编辑
摘要:当需要更新表中的数据或像表中插入数据时,在很多情况下需要产生唯一的整数序列键 一:更新列的值为唯一值 原数据如下图: 可以定义一个CTE,返回orerid列的值以及row_number()的计算结果。如果行号没有排序要求,可以在窗口排序子句中使用(select null),然后再针对CTE的外部查询 阅读全文
posted @ 2017-05-05 22:24 小破天 阅读(275) 评论(0) 推荐(0) 编辑
摘要:与数据操作相关的场景要生成日期和时间序列,序列的范围是从输入值@start到@end,且具有一定的时间间隔。这样的场景包括填充数据仓库中的时间维度、应用程序的运行时间安排以及其他。可以借助http://www.cnblogs.com/xiaopotian/articles/6814916.html里 阅读全文
posted @ 2017-05-05 21:33 小破天 阅读(594) 评论(0) 推荐(0) 编辑
摘要:虚拟数字辅助表是一个整数序列,可以用来完成多种不同的任务,如生成日期跟时间值序列,及分裂值列表。要用查询逻辑产生一个大的整数序列,可以使用交叉连接(cross join)。 交叉联接(cross join)执行两个表的笛卡尔积(就是把表A和表B的数据进行一个N*M的组合)。也就是说,它匹配一个表与另 阅读全文
posted @ 2017-05-05 21:03 小破天 阅读(781) 评论(0) 推荐(0) 编辑
摘要:数据源如下 T1中col1的序列号并不连续,我们需要找到现有值的连续区间, 方案1:使用子查询解决 方案2:使用窗口函数解决 阅读全文
posted @ 2017-05-04 22:16 小破天 阅读(373) 评论(0) 推荐(0) 编辑
摘要:begin tran update ... --更新 select ... --确认commit tran --提交或rollback tran --回滚 不说了,都是泪啊 阅读全文
posted @ 2017-03-28 23:13 小破天 阅读(207) 评论(0) 推荐(0) 编辑
摘要:先上个效果图吧 CTE递归查询里面用了一些小的技巧,查询出结果以后在前端用表格展示出来,层级视觉效果还是很明显的 with tree as(select [ID],[Name],[Address],[Remark],SortNo,Cast(RANK() OVER(order by SortNo,Na 阅读全文
posted @ 2017-02-12 11:30 小破天 阅读(2100) 评论(0) 推荐(0) 编辑
摘要:一:首先需要给表添加表描述 EXECUTE sp_addextendedproperty N'MS_Description', '人员信息表', N'user', N'dbo', N'table', N'表', NULL, NULL 二:其次添加字段描述,或者右键点击设计 EXECUTE sp_ad 阅读全文
posted @ 2017-02-06 13:26 小破天 阅读(366) 评论(0) 推荐(0) 编辑
摘要:视图和存储过程比较 1 CREATE proc p_compdb 2 @db1 sysname, --第一个库 3 @db2 sysname --第二个库 4 as 5 exec(' 6 select 类型=case isnull(a.xtype,b.xtype) when ''V'' then ' 阅读全文
posted @ 2016-11-18 21:21 小破天 阅读(397) 评论(0) 推荐(0) 编辑
摘要:CTE可以用来取递归,网上资料很多,这里就不再叙述了,今天遇到的需求是要限制只取2级,然后加了个临时的lev with tree as(select [CustomerID],[CustomerName],[PositionParentID],[PositionValus],[Status],[Me 阅读全文
posted @ 2016-04-24 21:40 小破天 阅读(478) 评论(0) 推荐(0) 编辑
摘要:以前只用过在insert完以后利用select @@IDENTITY返回主键ID,最近在做微信公众平台,遇到一个需求是在帮绑定万微信openid后自动完成登陆,这就需要update以后返回主键ID,查了一些资料找到了output这一解决方案。 update [SmartPromoter] set [ 阅读全文
posted @ 2016-04-19 15:11 小破天 阅读(2218) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示