数据 行列转换 且分解时间

kcsg 2009-09-21 03:25:08
一个例子 已完成 当需要加强 各位在帮助下
巡检线路表
巡检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啊
...全文
39 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kcsg 2009-09-21
  • 打赏
  • 举报
回复
日期我完成了 关注下面的任务啊

csdyyr 台兄 不错 是我要的
不过在提个要求好吗
巡检ID 线路段名称 1 2 3 4 5 6
---- ----- ---- ---- ---- ---- ---- ----
01 北京至西安 1 1 2 2 3 3
02 北京至郑州 1 1
*/

上面日期的数字能不能返回第几个时间时间段 ,就是第一个时间段为1 第二个为2 第三个为3啊
--小F-- 2009-09-21
  • 打赏
  • 举报
回复
提供一点思路
借助系统函数把没有补全的日期补全
然后行转列
可以参考:
http://topic.csdn.net/u/20090906/17/a91cd31e-abf7-4190-8486-c5491aa63c71.html?seed=1380177511&r=59598572#r_59598572
soft_wsx 2009-09-21
  • 打赏
  • 举报
回复
又来了!

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧