Kom ihåg mig?
Home Menu

Menu


SELECT-problem(SQL Server)

 
Ämnesverktyg Visningsalternativ
Oläst 2010-01-28, 00:57 #1
yadis yadis är inte uppkopplad
Medlem
 
Reg.datum: Mar 2009
Inlägg: 66
yadis yadis är inte uppkopplad
Medlem
 
Reg.datum: Mar 2009
Inlägg: 66
Standard SELECT-problem(SQL Server)

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
yadis är inte uppkopplad   Svara med citatSvara med citat
 


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 00:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017