一个按日期排序输出的查询方法

T出差:  日期,人员,地点,返回日期         0506  A    上海  0506         0508  A    北京  0510         0501  B    河北  0508         0520  C    南京  0610 ......... 我想得到一个表格: 序号,姓名,01,02,03,04,05,06,07,08, 09,  10....20....31 (指日期) 01  A                      上海    北京 北京 北京      02  B    河北 河北 河北 ....        河北                            03  C                                                南京 南京...南京 即得到一个直观的在一个月中人员出差地点的表格,无地点为空。                 

 

 

以5月為例

SQL code
   
   
if not object_id ( ' T ' ) is null drop table T Go Create table T( [ 日期 ] nvarchar ( 4 ), [ 人员 ] nvarchar ( 1 ), [ 地点 ] nvarchar ( 2 ), [ 返回日期 ] nvarchar ( 4 )) Insert T select N ' 0506 ' ,N ' A ' ,N ' 上海 ' ,N ' 0506 ' union all select N ' 0508 ' ,N ' A ' ,N ' 北京 ' ,N ' 0510 ' union all select N ' 0501 ' ,N ' B ' ,N ' 河北 ' ,N ' 0508 ' union all select N ' 0520 ' ,N ' C ' ,N ' 南京 ' ,N ' 0610 ' Go if object_id ( ' Tempdb..# ' ) is not null drop table # select top 10 ID = identity ( int , 1 , 1 ) into # from sysobjects -- 輔助表 declare @s nvarchar ( 4000 ), @i int select @s = '' , @i = 31 while @i > 0 select @s = ' , ' + quotename ( @i ) + N ' =max(case when day([日期])= ' + rtrim ( @i ) + N ' then [地点] else '''' end) ' + @s , @i = @i - 1 exec ( ' select [人员] ' + @s + ' from (Select dateadd(d,t2.ID,cast( '' 08 '' +[日期] as datetime)) [日期],[人员],[地点] from T join # t2 on dateadd(d,t2.ID,cast( '' 08 '' +[日期] as datetime))<=cast( '' 08 '' +[返回日期] as datetime))Tab group by [人员] ' ) 人员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 -- -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- A 北京 北京 B 河北 河北 河北 河北 河北 河北 河北 C 南京 南京 南京 南京 南京 南京 南京 南京 南京 南京 ( 3 個資料列受到影響)
以上需要輔助表.. 行列互轉例子: http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值