사용자에 대한 데이터베이스 및 각 활동 범주에 소요 한 시간을 쿼리하고 싶습니다. 이러한 범주는 ActivityCategory 테이블 (int Id, varchar Name)에 저장됩니다. 아무도 특정 카테고리에서 시간을 보냈을 때도 그들 중 8 명이 있고 나는 그들 모두를보고 싶습니다.그룹에 null/0 행 포함
select u.NoEmploye, u.FirstName, u.LastName, Total=sum(h.NbHeures), ac.Name
from Users u
join Semaines s on u.EntityGuid=s.UserGuid
join HeuresProjets hp on s.Id=hp.WeekId
join Heures h on hp.HPId=h.HpGuid
join ActivityCodes code on h.Code=code.ActivityId
join ActivityCategory ac on code.Categorie=ac.Id
group by u.NoEmploye, u.FirstName, u.LastName, ac.Name
order by u.NoEmploye
그것은 잘 작동하지만 사용하지 않는 ActivityCategories를 반환하지 않습니다
나는 다음과 같은 쿼리를 가지고있다. 나는 full/left/right/inner/outer/you-name-it 조인의 모든 조합을 시도했다. 내가 얻을 수있는 가장 좋은 방법은 특정 사용자가 사용하지 않지만 다른 사용자가 사용하는 범주에 대해 nobody 및 null ac.Name에서 카테고리를 사용하는 경우 완전히 null 행을 얻는 것입니다. 나는 group by [...]
ac.Name
부분이 사용되지 않는 범주를 "먹는"부분이라고 생각합니다. 내가 도대체 뭘 잘못하고있는 겁니까? 결과를 그룹화 할 두 번째 쿼리를 선택 쿼리에 써야합니까? 쓸만한 12 가지 유사한 쿼리가 있으므로 설명이없는 고정 쿼리 대신 이해하고 싶습니다.
편집 Lamak의 두 번째 쿼리는 지금까지 작동하지만 Where 절을 추가하면 동일한 문제가 발생합니다.
EDIT2 ypercube '편집 완벽하게 작동
지금 내가 제대로 쿼리를 이해한다면 보자. 결과가 null 일 때 proprer 값을 갖기 위해 Sum을 0으로 결합합니다. ActivityCategory에서 선택한 항목을 시작하여 사용하지 않는 항목까지 모두 포함되도록합니다. ActivityCategory와 Users의 모든 조합을 갖기 위해 사용자와 조인합니다. 나는 Activitycodes에 가입하여 관련 행을 얻은 다음 내면의 다른 테이블을 Semaine에 연결합니다. Cross join 전에 데이터를 필터링하고 싶기 때문에 내 조건이 Semaine 테이블의 조인에 적용됩니다. 마지막으로, 사용자 및 ActivityCategory별로 데이터를 그룹화하여 합계가 작동하도록합니다.
당신의 논리는 옳은 것 같지만 쿼리를 실행할 때 SQL Server는 null 사용자 데이터가있는 8 행 (각 카테고리 당 1 개)을 리턴합니다. 결과는 0 이외에 – 0xFF
입니다. 그리고 사용자는 아직 사용하지 않은 카테고리에 대해 행을 가지고 있지 않습니다. – 0xFF
@fhlamarche. 나는 당신이 나에게 (그리고 다른 사용자들에게) 더 나은 대답을 제공하기 위해 몇 가지 샘플 데이터와 예상 결과를 게시 할 필요가 있다고 생각한다. – Lamak