Je ne vois pas pourquoi une vue de base de données ne pourrait pas être utilisée ici à l'aide d'un champ d'indication de courant.
En supposant que vous aviez un type 2 Dimension en tant que tel:
UserID
,DayOfWeek
,StartWorkTime
,EndWorkTime
,EffectiveStartDate
,EffectiveEndDate
,Current -- Y/N Flags for being current or not current
Vous pouvez créer efficacement une vue de base de données qui pivote StartWorkTime et EndWorkTime sur colonnes et UserID actuelles.
CREATE VIEW [schema].[view_name] AS
SELECT
UserID
,[Current] -- Y = Yes/N = No
,MAX(CASE WHEN DayOfWeek = 2 THEN StartWorkTime ELSE NULL END) AS Mon_StartWorkTime
,MAX(CASE WHEN DayOfWeek = 2 THEN EndWorkTime ELSE NULL END) AS Mon_EndWorkTime
,MAX(CASE WHEN DayOfWeek = 3 THEN StartWorkTime ELSE NULL END) AS Tue_StartWorkTime
,MAX(CASE WHEN DayOfWeek = 3 THEN EndWorkTime ELSE NULL END) AS Tue_EndWorkTime
,MAX(CASE WHEN DayOfWeek = 4 THEN StartWorkTime ELSE NULL END) AS Wed_StartWorkTime
,MAX(CASE WHEN DayOfWeek = 4 THEN EndWorkTime ELSE NULL END) AS Wed_EndWorkTime
,MAX(CASE WHEN DayOfWeek = 5 THEN StartWorkTime ELSE NULL END) AS Thu_StartWorkTime
,MAX(CASE WHEN DayOfWeek = 5 THEN EndWorkTime ELSE NULL END) AS Thu_EndWorkTime
,MAX(CASE WHEN DayOfWeek = 6 THEN StartWorkTime ELSE NULL END) AS Fri_StartWorkTime
,MAX(CASE WHEN DayOfWeek = 6 THEN EndWorkTime ELSE NULL END) AS Fri_EndWorkTime
FROM [database].[schema].[table_name]
WHERE [Current] = 'Y'
GROUP BY
UserID
,[Current]
Ensuite, vos résultats seront pour un employé travaillant 0800 à 1600 quelques jours et à 1200 autres jours en tant que tels:
UserID Current Mon_StartWorkTime Mon_EndWorkTime Tue_StartWorkTime Tue_EndWorkTime Wed_StartWorkTime Wed_EndWorkTime Thu_StartWorkTime Thu_EndWorkTime Fri_StartWorkTime Fri_EndWorkTime
1 Y 08:00:00.0000000 16:00:00.0000000 08:00:00.0000000 16:00:00.0000000 08:00:00.0000000 16:00:00.0000000 08:00:00.0000000 12:00:00.0000000 08:00:00.0000000 12:00:00.0000000
Est-ce une vraie table de dimension dans un schéma en étoile, auquel cas ce une rangée dans la table de dimension représente-t-elle? Ou, avez-vous besoin d'une forme de structure de table normalisée? (Question mineure, quelle version de SQL utilisez-vous, par exemple avez-vous accès au type de données "time"?) –
Donc c'est une grande table peuplée de plusieurs tables plus petites, c'est une vraie dimension dans un schéma en étoile, correct ? Le but de cette table est de garder un historique de quand et quels changements sont survenus. Et MS SQL 2012, donc oui le temps est disponible. – WBratz