FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Jag har megaproblem med en select.
Tabellernas relationer ser ut så här(UserGroup är många-till-många nedan men en user är bara medlem i en grupp) User(UserID) ---->UserGroup(UserID, GroupID)---->Group(GroupID)--->GroupRules(GroupRulesID, GroupID(FK)) User(UserID)---->Training(TrainingID, UserID(FK)) I Grupp 11 har jag 31 medlemmar. Av dessa har 2 stycken tränat förra veckan, resten har inte tränat alls förra veckan(ingen rad i Training förra veckan på dessa 29). 2 stycken, av dom som inte tränat alls förra veckan, har dock tränat andra veckor längre bak i tiden. Med Selecten nedan så vill jag summera alla 31 personernas träning för förra veckan, vilket hamnar under TotDistance. Jag vill alltså få 0 i träning på 29 stycken och summan av träningen för dom 2 som gjort minst ett pass förra veckan. Med nedanstående får jag dock bara tebax dom 2 som tränade nåt förra veckan. Hur få med dom andra 29 med en 0'a under TotDistance? SELECT [User].UserID, GroupRules.DistanceEachWeek, IsNull(sum(distance), 0) AS TotDistance FROM [User] LEFT JOIN Training ON [User].UserID = Training.UserID JOIN [UserGroup] ON [User].UserID = [UserGroup].UserID JOIN [Group] ON [UserGroup].GroupID = [Group].GroupID JOIN [GroupRules] on [Group].GroupID = [GroupRules].GroupID WHERE [Group].GroupID = 11 AND Training.TrainingDate >= dbo.F_START_OF_WEEK(DateAdd(day,-7,GetDate()),2) AND Training.TrainingDate <= dbo.F_END_OF_WEEK(DateAdd(day,-7,GetDate()),2) GROUP BY [User].UserID, GroupRules.DistanceEachWeek Om jag kör denna fråga(tagit bort de 2 raderna som kollar att det bara är för förra veckan vi kollar): SELECT [User].UserID, GroupRules.DistanceEachWeek, IsNull(sum(distance), 0) AS TotDistance FROM [User] LEFT JOIN Training ON [User].UserID = Training.UserID JOIN [UserGroup] ON [User].UserID = [UserGroup].UserID JOIN [Group] ON [UserGroup].GroupID = [Group].GroupID JOIN [GroupRules] on [Group].GroupID = [GroupRules].GroupID WHERE [Group].GroupID = 11 GROUP BY [User].UserID, GroupRules.DistanceEachWeek ....då får jag snällt fram alla 31 med 0'a på de 27(4 har ju tränat nån gång) som inte tränat nåt alls eftersom jag kör IsNull(sum(distance), 0) som lägger till 0 på de utan träning. Men lägger jag till kollen att vi bara ska kolla förra veckan så får jag alltså bara de 2 som tränat nåt då. Hur få med de andra 29 med 0a? (De 2 funktionerna dbo.F_START_OF_WEEK och dbo.F_END_OF_WEEK returnerar måndagens datum och söndagen datum för den veckan vars dag man skickar in tillhör.) Senast redigerad av yadis den 2010-01-28 klockan 01:14 |
||
![]() |
![]() |
|
|