11 2011 档案
行转列和列转行
摘要:行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现。在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过。为了加深认识,再总结一次。行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列)。--创建测试环境USE tempdb;GOIF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orders;GOCREATE TABLE dbo.Orders( orderid int NOT... 阅读全文
posted @ 2011-11-29 11:55 冰羽的世界 阅读(6652) 评论(0) 推荐(0)
合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
摘要:示例表 tb 数据如下id value—————1 aa1 bb2 aaa2 bbb2 ccc第一种SELECT id, [val]=( SELECT [value] +',' FROM tb AS b WHERE b.id = a.id FOR XML PATH('') ) FROM tb AS a 第一种显示结果1 aa,bb,1 aa,bb,2 aaa,bbb,ccc,2 aaa,bbb,ccc,2 aaa,bbb,ccc,第二种SELECT id, ... 阅读全文
posted @ 2011-11-29 11:37 冰羽的世界 阅读(285) 评论(0) 推荐(0)
Sql Server 几个时间计算方法
摘要:下面的参数都是传入一个日期,试验时可用GETDATE()1、求当月第一天select @DATE-DAY(@DATE)+12、求下月第一天select DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)就是在当月第一天的基础上+1月3、求当月最后一天select DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1就是在下月第一天的基础上-1天4、求当月的天数selectDAY(DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1)就是对当月最后一天进行day运算5、求当月的所有日期SELECT DATEADD(DAY,NUMBE 阅读全文
posted @ 2011-11-29 11:27 冰羽的世界 阅读(859) 评论(0) 推荐(0)
事实表计数比事实表数据量大
摘要:事实表:TweeterID,....。其中TweeterID为业务主键,没设置代理键。数据30万维度表:TweeterID,EducateName。EducateName为小学,中学,高中,大学这样的值。TweeterID唯一,即每个人只保留最高学历。数据量70万。两表通过TweeterID做关联,一做模型,发现,悲剧了。模型最终出来的事实表记录数为70万!可以推测出,如果你的事实表用的是业务键,Cube在做处理的时候,处理方式不是left join,是外连接?会遍历中维度表中所有的记录!!!没办法,本来想偷点懒的,最后还是只能把维度表改成EducateKey,EducateName这样的形式 阅读全文
posted @ 2011-11-21 15:14 冰羽的世界 阅读(275) 评论(0) 推荐(0)