2013-11-01 362 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 

這是正在返回什麼: enter image description here

我已經努力並設置爲空OriginalEstimateHours但0返回。我怎樣才能讓這些單元變成空白?

+0

什麼是Effort和OriginalEstimateHours的類型?我猜想某些數字,他們不允許是空的?您可能想要返回一個僞造號碼,例如-99以顯示它實際上是「false」 – Dave

+3

您發佈的查詢與您顯示的結果集不匹配。 「Category」,「IncidentNumber」等去了哪裏? 'MondayHours'已經成爲'Monday' –

+0

他們的類型是INT和BIGINT,這可能就是爲什麼會出現這種情況。但我仍然希望它是空的。 –

回答

1

我懷疑STY.EffortTSK.OriginalEstimateHoursSELECT子句中的行爲RowType 3)是數字。

從文檔UNION

作爲UNION操作的一部分列的定義不必相同,但它們必須通過隱式轉換兼容。 當數據類型不同時,結果數據類型根據data type precedence的規則確定。

我強調

裹那些列在CONVERT(varchar(20),STY.Effort)以便選擇用於這些列類型是varchar而不是數字類型。

2

它們的類型INT和BIGINT,

如果你想要一個空字符串,而不是0NULL,您將需要使用CASTCONVERT功能列轉換爲VARCHAR類型。您不能在數字列中輸入空字符串。您可能還需要使用CASE語句將0字符串轉換爲空字符串。

相關問題