Aide de SQL Script

J'ai une table comme celle-ci nommée "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 

qui a les détails correspondants. Où 1 est 'vrai' et 0 est faux.

 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. 

Compte tenu des détails ci-dessus, j'ai besoin de faire de la cartographie de table à table et besoin de générer une table comme celle-ci, où je dois get datatables uniquement celles qui ont un drapeau 1

 1 Sunday 2 Monday 3 Tuesday 4 Wednesday 

pour le premier logging.

Je crois que vous cherchez quelque chose comme:

 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 

Ou ceux qui devraient être des rangées? Ensuite, vous devrez d'abord unpivot datatables source comme unpivot :

 select cast(subssortingng(dayname, 4, 1) as tinyint) as DayNumber, case cast(subssortingng(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? 
 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 

AVIS DE NONRESPONSABILITÉ – Je sais que cela ne résout pas votre problème, mais ne serait-il pas préférable d'avoir une table qui a été dénormalisée à quelque chose comme:

 ID | WeekNo | DayNo ---------------------- 1 1 1 2 1 2 3 1 3 4 2 6 5 2 7 

par conséquent, vous n'ajoutez que des jours à la table où le travail a été effectué ce jour-là (c.-à-d. qu'il n'y a pas eu de travail les jours 4 à 7 de la semaine 1 et seulement les 6 et 7 de la semaine 2). Vous pourriez alors avoir une certaine logique dans votre application .net qui «connaissait» la totalité des jours de la semaine et vous a présenté une list d'exceptions (c.-à-d. Les jours qui n'étaient pas dans le tableau pour une semaine donnée)

ce serait ma première pensée alternative sur ce 'débat' …