周数据转换为天数据的一个Sql数据查询

以前碰到的一个表,存储时间按照周为单位存储,而却需要按照天为单位使用。为了减少程序复杂度,便增加了多层查询,提高Sql查询结果可用性。

 

select 
    (week_no-week_start)*7+week_day-week_day_start pp,
    dateadd(day,(week_no-week_start)*7+week_day-week_day_start,Month) the_day,
     *
from   
    (
    select
        case DatePart(w,Month) when 7 then 1 else DatePart(w,Month)+1 end as week_day_start,
        1 week_start,
        * 
    from
        (
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,1 as WEEK_DAY
            ,[WorkHours_MON]
            ,[H_MON] as H
            ,[M_MON] as M
            ,[GroupCode]
         FROM
            [CardTable]
        union
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,2 as WEEK_DAY
            ,[WorkHours_TUE] as WorkHours
            ,[H_TUE] as H
            ,[M_TUE] as M
            ,[GroupCode]
          FROM
            [CardTable]
        union
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,3 as WEEK_DAY
            ,[WorkHours_WED] as WorkHours
            ,[H_WED] as H
            ,[M_WED] as M
            ,[GroupCode]
          FROM
            [CardTable]
        union
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,4 as WEEK_DAY
            ,[WorkHours_THU] as WorkHours
            ,[H_THU] as H
            ,[M_THU] as M
            ,[GroupCode]
        FROM
            [CardTable]
        union
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,5 as WEEK_DAY
            ,[WorkHours_FRI] as WorkHours
            ,[H_FRI] as H
            ,[M_FRI] as M
            ,[GroupCode]
        FROM
            [CardTable]
        union
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,6 as WEEK_DAY
            ,[WorkHours_SAT] as WorkHours
            ,[H_SAT] as H
            ,[M_SAT] as M
            ,[GroupCode]
          FROM
            [CardTable]
        union
        SELECT
            [CompanyID]
            ,[EmployeeNO]
            ,[Year]
            ,[Month]
            ,[WEEK_NO]
            ,[Order_NO]
            ,[Sell_NO]
            ,[WorkCode]
            ,7 as WEEK_DAY
            ,[WorkHours_SUN] as WorkHours
            ,[H_SUN] as H
            ,[M_SUN] as M
            ,[GroupCode]
        FROM
            [CardTable]
        ) temp1
--    where
--    week_no=6
    )temp2
--where not( week_no=week_start and week_day<week_day_start)
order by pp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值