2013-10-17 2 views
0

쿼리에서 작업 중이며 예상치 못한 결과를 얻고 있습니다. 여기서 질의는 다음예상 결과를 반환하지 않는 결과 집합

USE SCRUMAPI2 

DECLARE @userParam VARCHAR(100) 
    ,@startDateParam DATETIME 
    ,@endDateParam DATETIME 
    ,@orgTeamPK VARCHAR(100) 
    ,@teamId VARCHAR(100) 
    ,@productId VARCHAR(100) 

SET @userParam = '%' 
SET @startDateParam = '2013-10-14 00:00:00' 
SET @endDateParam = '2013-10-20 23:59:59' 
SET @orgTeamPK = '%' 
SET @teamId = '%' 
SET @productId = '%' 

    SELECT '3' AS RowType 
     ,DTH.PointPerson AS Person 
     ,(
      CASE 
       WHEN USR.[Deleted] IS NULL 
        THEN 'Active' 
       ELSE 'Inactive' 
       END 
      ) AS [Status] 
     ,USR.OrganizationalTeamId AS OrganizationalTeam 
     ,COALESCE(PDT.[Name], APP.AppName) AS Project 
     ,(
      CASE 
       WHEN TSK.NAME IS NULL 
        THEN NULL 
       WHEN SPT.[Name] + ' - ' + SPT.[Description] IS NULL 
        THEN 'KanBan' 
       ELSE SPT.[Name] + ' - ' + SPT.[Description] 
       END 
      ) AS Sprint 
     ,COALESCE(STY.[Number], SCY.Catagory) AS Story 
     ,COALESCE(TSK.[Name], NSS.IncidentNumber) AS Task 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 2 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS MondayHours 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 3 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS TuesdayHours 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 4 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS WednesdayHours 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 5 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS ThursdayHours 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 6 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS FridayHours 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 7 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS SaturdayHours 
     ,CAST(SUM(CASE 
        WHEN DATEPART(dw, DTH.ActivityDate) = 1 
         THEN DTH.[Hours] 
        ELSE 0 
        END) AS VARCHAR(20)) AS SundayHours 
     ,CAST(SUM(DTH.[Hours]) AS VARCHAR(20)) AS TotalHours 
    FROM DailyTaskHours DTH 
    LEFT JOIN Task TSK ON DTH.TaskId = TSK.PK_Task 
    LEFT JOIN Story STY ON TSK.StoryId = STY.PK_Story 
    LEFT JOIN NonScrumStory NSS ON DTH.NonScrumStoryId = NSS.PK_NonScrumStory 
    LEFT JOIN Sprint SPT ON STY.SprintId = SPT.PK_Sprint 
    LEFT JOIN Product PDT ON STY.ProductId = PDT.PK_Product 
    LEFT JOIN ProductTeamUser PTU ON TSK.ProductTeamUserId = PTU.PK_ProductTeamUser 
    LEFT JOIN [User] USR ON PTU.UserId = USR.PK_User 
    LEFT JOIN OrganizationalTeam OLT ON USR.OrganizationalTeamId = OLT.PK_OrganizationalTeam 
    LEFT JOIN SupportCatagory SCY ON NSS.CatagoryId = SCY.PK_SupportCatagory 
    LEFT JOIN [Application] APP ON NSS.ApplicationId = APP.PK_Application 
    LEFT JOIN UserAuthorization UAN1 ON (
      PDT.PK_Product = UAN1.ProductId 
      AND UAN1.Deleted IS NULL 
      ) 
    LEFT JOIN UserAuthorization UAN2 ON (
      OLT.PK_OrganizationalTeam = UAN2.OrganizationalTeamId 
      AND UAN2.Deleted IS NULL 
      ) 
    WHERE DTH.PointPerson LIKE @userParam 
     AND ActivityDate >= @startDateParam 
     AND ActivityDate <= @endDateParam 
     AND COALESCE(USR.OrganizationalTeamId, '') LIKE @orgTeamPK 
     AND (
      COALESCE(UAN1.ProductId, '') LIKE @productId 
      OR COALESCE(UAN2.OrganizationalTeamId, '') LIKE @teamId 
      ) 
    GROUP BY DTH.PointPerson 
     ,PDT.[Name] 
     ,SPT.[Name] 
     ,SPT.[Description] 
     ,STY.[Number] 
     ,NSS.IncidentNumber 
     ,TSK.[Name] 
     ,OLT.[Name] 
     ,USR.[Deleted] 
     ,APP.AppName 
     ,SCY.Catagory 
     ,NSS.IncidentNumber 
     ,USR.OrganizationalTeamId 
    HAVING SUM(DTH.[Hours]) > 0 

결과 집합의 일부인 다음 OrganizationTeams 열의 셀의 첫 번째 사용자 두개의 결과를

enter image description here

가 NULL 반환. 이 사용자의 모든 셀에 대한

enter image description here

왜 반환하지 않습니다 3, 어떻게 그것을 않습니다 보장 할 수 있습니다 :이 왜,이 사용자가 3의 조직 팀을 할당 이해하지?

답변

1

OrganizationalTeam 열은 DailyTaskHours> 작업> ProductTeamUser> 사용자를 통해 조인됩니다. 각 조인은 NULL 값이 될 수 있으므로 이러한 조인을 각각 점검하십시오. SELECT *으로 Query를 실행하고 WHERE을 사용하여 두 행 중 하나만 리턴하십시오.

관련 문제