一个例子  已完成 当需要加强 各位在帮助下
巡检线路表 
巡检ID  线路段名称 
01      北京至西安 
02      北京至郑州 巡检计划时间 
ID  起始时间  结束时间  巡检ID 
01  2009-8-1  2009-8-3      01 
02  2009-8-9  2009-8-11    01 
03  2009-8-21  2009-8-23    01 
04  2009-8-26  2009-8-28    01 
05  2009-8-1  2009-8-2    02 
根据以上的两个表得到以下结果,一表关联而二表 ,把二表相关联的时间分别分解的31天的字段中使用1为标识 
巡检ID  线路段名称 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 
01      北京至西安 1  1 1          1  1 1                              1  1  1        1  1  1 
02      北京至郑州  1  1 1 csdyyr 台兄 完成的代码  SQL code
DECLARE @TA TABLE([巡检ID] VARCHAR(2), [线路段名称] NVARCHAR(5))
INSERT @TA 
SELECT '01', N'北京至西安' UNION ALL 
SELECT '02', N'北京至郑州'DECLARE @TB TABLE([ID] VARCHAR(2), [起始时间] DATETIME, [结束时间] DATETIME, [巡检ID] VARCHAR(2))
INSERT @TB 
SELECT '01', '2009-8-1', '2009-8-3', '01' UNION ALL 
SELECT '02', '2009-8-9', '2009-8-11', '01' UNION ALL 
SELECT '03', '2009-8-21', '2009-8-23', '01' UNION ALL 
SELECT '04', '2009-8-26', '2009-8-28', '01' UNION ALL 
SELECT '05', '2009-8-1', '2009-8-2', '02'
SELECT A.巡检ID,A.线路段名称,
[1]=MAX(CASE WHEN 1 BETWEEN DAY(起始时间) AND DAY(结束时间) THEN '1' ELSE '' END),
[2]=MAX(CASE WHEN 2 BETWEEN DAY(起始时间) AND DAY(结束时间) THEN '1' ELSE '' END),
[3]=MAX(CASE WHEN 3 BETWEEN DAY(起始时间) AND DAY(结束时间) THEN '1' ELSE '' END),
[4]=MAX(CASE WHEN 4 BETWEEN DAY(起始时间) AND DAY(结束时间) THEN '1' ELSE '' END),
[5]=MAX(CASE WHEN 5 BETWEEN DAY(起始时间) AND DAY(结束时间) THEN '1' ELSE '' END),
[6]=MAX(CASE WHEN 6 BETWEEN DAY(起始时间) AND DAY(结束时间) THEN '1' ELSE '' END)
FROM @TA AS A JOIN @TB AS B 
  ON A.巡检ID=B.巡检ID
GROUP BY A.巡检ID,A.线路段名称
/*
巡检ID 线路段名称 1    2    3    4    5    6    
---- ----- ---- ---- ---- ---- ---- ---- 
01   北京至西安 1    1    1              
02   北京至郑州 1    1                   
*/
csdyyr 台兄 不错 是我要的 
不过在提个要求好吗 
巡检ID 线路段名称 1    2    3    4    5    6    
---- ----- ---- ---- ---- ---- ---- ---- 
01  北京至西安 1    1    2      2      3  3 
02  北京至郑州 1    1                  
*/ 上面日期的数字能不能返回第几个时间时间段 ,就是第一个时间段为1 第二个为2 第三个为3啊

解决方案 »

  1.   

    提供一点思路  
    借助系统函数把没有补全的日期补全
    然后行转列
    可以参考:
    http://topic.csdn.net/u/20090906/17/a91cd31e-abf7-4190-8486-c5491aa63c71.html?seed=1380177511&r=59598572#r_59598572
      

  2.   

    日期我完成了 关注下面的任务啊csdyyr 台兄 不错 是我要的 
    不过在提个要求好吗 
    巡检ID 线路段名称 1    2    3    4    5    6    
    ---- ----- ---- ---- ---- ---- ---- ---- 
    01  北京至西安 1    1    2      2      3  3 
    02  北京至郑州 1    1                  
    */ 上面日期的数字能不能返回第几个时间时间段 ,就是第一个时间段为1 第二个为2 第三个为3啊