2013-11-01 3 views
-1

대신 빈 문자열의 반환 :제로는 내가 쿼리 함께 일하고

USE SCRUMAPI2 

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

SET @userParam = 'David Tunnell (tunnelld)' 
SET @startDateParam = '2013-10-21 00:00:00' 
SET @endDateParam = '2013-10-27 23:59:59' 
SET @orgTeamPK = '%' 
SET @teamId = '%' 
SET @productId = '%' 
SET @search = '%%' 

SELECT RowType AS RowType 
    ,Person AS Person 
    ,Project AS Project 
    ,ProjectType AS ProjectType 
    ,StoryNumber AS StoryNumber 
    ,StoryTitle AS StoryTitle 
    ,Effort AS Effort 
    ,Task AS Task 
    ,OriginalEstimateHours AS OriginalEstimateHours 
    ,MondayHours AS Monday 
    ,TuesdayHours AS Tuesday 
    ,WednesdayHours AS Wednesday 
    ,ThursdayHours AS Thursday 
    ,FridayHours AS Friday 
    ,SaturdayHours AS Saturday 
    ,SundayHours AS Sunday 
    ,TotalHours AS Total 
FROM (
    -- DATE DISPLAY 
    SELECT '1' AS RowType 
     ,'' AS Person 
     ,'' AS Project 
     ,'Category' AS ProjectType 
     ,'Incident #' AS StoryNumber 
     ,'' AS StoryTitle 
     ,'' AS Effort 
     ,'' AS Task 
     ,'' AS OriginalEstimateHours 
     ,'' AS Category 
     ,'' AS IncidentNumber 
     ,'' AS ApplicationName 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 0, @startDateParam)) = 2 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 0, @startDateParam), 111) ELSE '' END) AS MondayHours 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 1, @startDateParam)) = 3 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 1, @startDateParam), 111) ELSE '' END) AS TuesdayHours 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 2, @startDateParam)) = 4 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 2, @startDateParam), 111) ELSE '' END) AS WednesdayHours 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 3, @startDateParam)) = 5 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 3, @startDateParam), 111) ELSE '' END) AS ThursdayHours 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 4, @startDateParam)) = 6 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 4, @startDateParam), 111) ELSE '' END) AS FridayHours 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 5, @startDateParam)) = 7 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 5, @startDateParam), 111) ELSE '' END) AS SaturdayHours 
     ,(CASE WHEN DATEDIFF(d, @startDateParam, @endDateParam) >= 7 THEN '' WHEN DATEDIFF(d, @startDateParam, @endDateParam) <= 5 THEN '' WHEN DATEPART(dw, DATEADD(DAY, 6, @startDateParam)) = 1 THEN CONVERT(VARCHAR(10), DATEADD(DAY, 6, @startDateParam), 111) ELSE '' END) AS SundayHours 
     ,'' AS TotalHours 
    -- 

    UNION ALL 

    -- 
    -- GRAND TOTALS 
    -- 
    SELECT '2' AS RowType 
     ,'All Personnel' AS Person 
     ,'' AS Project 
     ,'' AS ProjectType 
     ,'' AS StoryNumber 
     ,'' AS StoryTitle 
     ,'' AS Effort 
     ,'Total:' AS Task 
     ,'' AS OriginalEstimateHours 
     ,'' AS Category 
     ,'' AS IncidentNumber 
     ,'' AS ApplicationName 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 2 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Monday 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 3 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Tuesday 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 4 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Wednesday 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 5 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Thursday 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 6 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Friday 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 7 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Saturday 
     ,CAST(SUM(CASE WHEN DATEPART(dw, DTH.ActivityDate) = 1 THEN DTH.[Hours] ELSE 0 END) AS VARCHAR(20)) AS Sunday 
     ,CAST(SUM(DTH.[Hours]) AS VARCHAR(20)) AS Total 
    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 UserAuthorization UAN ON (
      PDT.PK_Product = UAN.ProductId 
      AND USR.OrganizationalTeamId = UAN.OrganizationalTeamId 
      AND UAN.Deleted IS NULL 
      ) 
    WHERE DTH.PointPerson LIKE @userParam 
     AND ActivityDate >= @startDateParam 
     AND ActivityDate <= @endDateParam 
     AND COALESCE(OLT.PK_OrganizationalTeam, '') LIKE @orgTeamPK 
     AND (
      COALESCE(UAN.ProductId, '') LIKE @productId 
      OR COALESCE(UAN.OrganizationalTeamId, '') LIKE @teamId 
      ) 
     AND (
      (
       STY.Number LIKE @search 
       OR STY.Number IS NULL 
       ) 
      OR (
       STY.Title LIKE @search 
       OR STY.Number IS NULL 
       ) 
      OR (
       TSK.NAME LIKE @search 
       OR STY.Number IS NULL 
       ) 
      ) 

    UNION ALL 

    -- 
    -- Details by PERSON, PROJECT, SPRINT, STORY, TASK 
    -- 
    SELECT '3' AS RowType 
     ,DTH.PointPerson AS Person 
     ,COALESCE(PDT.[Name], APP.AppName) AS Project 
     ,(
      CASE WHEN (
         STY.KanBanProductId IS NOT NULL 
         AND STY.SprintId IS NULL 
         ) THEN 'KanBan' WHEN (
         STY.KanBanProductId IS NULL 
         AND STY.SprintId IS NOT NULL 
         ) THEN 'Sprint' ELSE SCY.Catagory END 
      ) AS ProjectType 
     ,COALESCE(STY.[Number], NSS.IncidentNumber) AS StoryNumber 
     ,COALESCE(STY.Title, NSS.[Description]) AS StoryTitle 
     ,STY.Effort AS Effort 
     ,COALESCE(TSK.[Name], '') AS Task 
     ,TSK.OriginalEstimateHours AS OriginalEstimateHours 
     ,SCY.Catagory AS Category 
     ,NSS.IncidentNumber AS IncidentNumber 
     ,APP.AppName AS ApplicationName 
     ,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 SupportCatagory SCY ON NSS.CatagoryId = SCY.PK_SupportCatagory 
    LEFT JOIN [Application] APP ON NSS.ApplicationId = APP.PK_Application 
    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 UserAuthorization UAN ON (
      PDT.PK_Product = UAN.ProductId 
      AND USR.OrganizationalTeamId = UAN.OrganizationalTeamId 
      AND UAN.Deleted IS NULL 
      ) 
    WHERE DTH.PointPerson LIKE @userParam 
     AND ActivityDate >= @startDateParam 
     AND ActivityDate <= @endDateParam 
     AND COALESCE(OLT.PK_OrganizationalTeam, '') LIKE @orgTeamPK 
     AND (
      COALESCE(UAN.ProductId, '') LIKE @productId 
      OR COALESCE(UAN.OrganizationalTeamId, '') LIKE @teamId 
      ) 
     AND (
      (
       STY.Number LIKE @search 
       OR STY.Number IS NULL 
       ) 
      OR (
       STY.Title LIKE @search 
       OR STY.Number IS NULL 
       ) 
      OR (
       TSK.NAME LIKE @search 
       OR STY.Number IS NULL 
       ) 
      ) 
    GROUP BY DTH.PointPerson 
     ,PDT.[Name] 
     ,SPT.[Name] 
     ,SPT.[Description] 
     ,STY.[Number] 
     ,STY.Title 
     ,TSK.[Name] 
     ,SCY.Catagory 
     ,NSS.IncidentNumber 
     ,APP.AppName 
     ,STY.KanBanProductId 
     ,STY.SprintId 
     ,NSS.[Description] 
     ,TSK.OriginalEstimateHours 
     ,STY.Effort 
    HAVING SUM(DTH.[Hours]) > 0 
    -- 

    UNION ALL 

    -- 
    -- Sub-TOTAL by PERSON 
    -- 
    SELECT '4' AS RowType 
     ,DTH.PointPerson AS Person 
     ,'' AS Project 
     ,'' AS ProjectType 
     ,'' AS StoryNumber 
     ,'' AS StoryTitle 
     ,'' AS Effort 
     ,'Subtotal:' AS Task 
     ,'' AS OriginalEstimateHours 
     ,'' AS Category 
     ,'' AS IncidentNumber 
     ,'' AS ApplicationName 
     ,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 SupportCatagory SCY ON NSS.CatagoryId = SCY.PK_SupportCatagory 
    LEFT JOIN [Application] APP ON NSS.ApplicationId = APP.PK_Application 
    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 UserAuthorization UAN ON (
      PDT.PK_Product = UAN.ProductId 
      AND USR.OrganizationalTeamId = UAN.OrganizationalTeamId 
      AND UAN.Deleted IS NULL 
      ) 
    WHERE DTH.PointPerson LIKE @userParam 
     AND ActivityDate >= @startDateParam 
     AND ActivityDate <= @endDateParam 
     AND COALESCE(OLT.PK_OrganizationalTeam, '') LIKE @orgTeamPK 
     AND (
      COALESCE(UAN.ProductId, '') LIKE @productId 
      OR COALESCE(UAN.OrganizationalTeamId, '') LIKE @teamId 
      ) 
     AND (
      (
       STY.Number LIKE @search 
       OR STY.Number IS NULL 
       ) 
      OR (
       STY.Title LIKE @search 
       OR STY.Number IS NULL 
       ) 
      OR (
       TSK.NAME LIKE @search 
       OR STY.Number IS NULL 
       ) 
      ) 
    GROUP BY DTH.PointPerson 
    HAVING SUM(DTH.[Hours]) > 0 
    ) AS My_View 
ORDER BY Person 
    ,RowType 
    ,Project 
    ,ProjectType 
    ,StoryNumber 
    ,StoryTitle 
    ,Task 

그리고이 반환 될 것입니다 : 는 노력과 빈으로 설정 OriginalEstimateHours하지만 0이 enter image description here

내가 한 돌아 오는 중. 셀을 비우려면 어떻게해야합니까?

+0

Effort 및 OriginalEstimateHours 유형은 무엇입니까? 나는 일종의 숫자를 추측하고 그들은 비어있을 수없는거야? -99와 같은 가짜 숫자를 반환하여 실제로 "거짓"임을 표시 할 수 있습니다. – Dave

+3

게시 한 쿼리가 표시된 결과 집합과 일치하지 않습니다. 'Category','IncidentNumber' 등은 어디에 있습니까? 그리고'MondayHours'는'Monday'가되었습니다. –

+0

그들의 타입은 INT와 BIGINT입니다. 이것이 일어나는 이유입니다. 어쨌든 나는 그것을 비우고 싶다. –

답변

1

(RowType 행의 SELECT 절에있는) STY.EffortTSK.OriginalEstimateHours이 숫자라고 생각합니다. UNION에 대한 문서에서

:

노동 조합 운영의 일부인 열의 정의는 같을 필요는 없지만 암시 적 변환을 통해 호환되어야합니다. 데이터 형식이 다른 경우 결과 데이터 형식은 data type precedence에 대한 규칙에 따라 결정됩니다.

(내 강조)

그 열에 대한 선택 유형이 varchar보다는 숫자 유형 그래서 CONVERT(varchar(20),STY.Effort)에서 그 열을 감 쌉니다.

2

그들의 유형

당신이 빈 문자열을 원하는 경우에, INT와 BIGINT, 그리고하지 0 또는 NULL, 당신은 VARCHAR 타입에 열을 캐스팅하기 위해 CAST 또는 CONVERT 기능을 사용해야합니다 . 빈 열을 숫자 열에 넣을 수 없습니다. 또한 문을 사용하여 0 문자열을 빈 문자열로 변환해야 할 수도 있습니다.

관련 문제