我有一个这样的表,名为"Days“
Day 1 Day 2 Day 3 Day 4 Day 5 Day 6 Day 7
1 1 1 1 0 0 0
1 1 1 1 0 0 0其中包含相应的详细信息。其中1为'true‘,0为false。
DaY 1 - sunday
day 2- monday
day 3 - tuesday
day 4- wednesday
day5 - thursday
day 6 - friday
dayy 7- saturday
1 - denotes there is work on the given day
0 - denotes there is no work on the given day.考虑到上面的细节,我需要进行列到表的映射,并需要生成一个如下所示的表,其中我只需要获取那些具有标志1的数据
1 Sunday
2 Monday
3 Tuesday
4 Wednesday对于第一个记录。
发布于 2010-09-15 19:50:55
我相信您正在寻找类似以下内容的内容:
select
case when day1=1 then '1 Sunday' end Sunday,
case when day2=1 then '2 Monday' end Monday,
case when day3=1 then '3 Tuesday' end Tuesday,
case when day4=1 then '4 Wednesday' end Wednesday,
case when day5=1 then '5 Thursday' end Thursday,
case when day6=1 then '6 Friday' end Friday,
case when day7=1 then '7 Saturday' end Saturday
from [table]
where day1+day2+day3+day4+day5+day6+day7 <> 7或者那些应该是行?然后,您需要首先对源数据执行unpivot操作,如下所示:
select
cast(substring(dayname, 4, 1) as tinyint) as DayNumber,
case cast(substring(dayname, 4, 1) as tinyint)
when 1 then 'Sunday'
when 2 then 'Monday'
when 3 then 'Tuesday'
when 4 then 'Wednesday'
when 5 then 'Thursday'
when 6 then 'Friday'
when 7 then 'Saturday' end [DayName]
, DayFlag
from (select * from [table] t where day1+day2+day3+day4+day5+day6+day7 <> 7) f
unpivot
(
DayFlag for DayName in ([day1], [day2], [day3], [day4], [day5], [day6], [day7])
) unpvt
where DayFlag = 1 --is this what you need?发布于 2010-09-15 19:52:38
WITH [days] (id, day1, day2, day3, day4, day5, day6, day7) AS
(
SELECT 1, 1, 1, 1, 1, 1, 0, 0
UNION ALL
SELECT 2, 1, 1, 1, 1, 1, 0, 0
)
SELECT id, DATENAME(dw, DATEADD(d, CAST(SUBSTRING(wd, 4, 1) AS INT), '2005-01-01')), work
FROM [days]
UNPIVOT
(
work FOR wd IN
(day1, day2, day3, day4, day5, day6, day7)
) AS up
WHERE work = 1发布于 2010-09-15 20:09:58
免责声明-我知道它不能解决您的问题,但是有一个非规范化的表不是更好吗?
ID | WeekNo | DayNo
----------------------
1 1 1
2 1 2
3 1 3
4 2 6
5 2 7因此,您实际上只将当天执行工作的天数添加到表中(即,在第1周的第4-7天没有工作,在第2周的第6天和第7天只执行了工作)。??然后,你可以在你的.net应用程序中有一些逻辑,‘知道’一周中完整的日期范围,并向你显示一个例外列表(即,对于任何给定的WeekNo,表中没有的日期)
这将是我对这场“辩论”的第一个替代想法…
https://stackoverflow.com/questions/3717223
复制相似问题