行转列和列转行
摘要:行列互转,是一个经常遇到的需求。实现的方法,有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)
合并多行查询数据到一行:使用自连接、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)
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)
事实表计数比事实表数据量大
摘要:事实表:TweeterID,....。其中TweeterID为业务主键,没设置代理键。数据30万维度表:TweeterID,EducateName。EducateName为小学,中学,高中,大学这样的值。TweeterID唯一,即每个人只保留最高学历。数据量70万。两表通过TweeterID做关联,一做模型,发现,悲剧了。模型最终出来的事实表记录数为70万!可以推测出,如果你的事实表用的是业务键,Cube在做处理的时候,处理方式不是left join,是外连接?会遍历中维度表中所有的记录!!!没办法,本来想偷点懒的,最后还是只能把维度表改成EducateKey,EducateName这样的形式
阅读全文
posted @
2011-11-21 15:14
冰羽的世界
阅读(275)
推荐(0)