0

私は複雑なクエリを扱っています:

SELECT DTH.PointPerson AS Person
    ,(
        CASE 
            WHEN USR.[Deleted] IS NULL
                THEN 'Active'
            ELSE 'Inactive'
            END
        ) AS [Status]
    ,OLT.[Name] AS OrganizationalTeam
    ,PDT.[Name] 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], NSS.IncidentNumber) AS Story
    ,TSK.[Name] 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
WHERE DTH.PointPerson LIKE @userParam
    AND ActivityDate >= @startDateParam
    AND ActivityDate <= @endDateParam
    AND OLT.PK_OrganizationalTeam LIKE @orgTeamPK
GROUP BY DTH.PointPerson
    ,PDT.[Name]
    ,SPT.[Name]
    ,SPT.[Description]
    ,STY.[Number]
    ,NSS.IncidentNumber
    ,TSK.[Name]
    ,OLT.[Name]
    ,USR.[Deleted]
HAVING SUM(DTH.[Hours]) > 0

上記のパラメーター (@orgTeamPK、@startDateParam など) は、ユーザーのドロップダウン メニューの選択に基づいて割り当てられます。

これは C# を介して操作されます。

SqlDataSource2.SelectParameters["orgTeamPK"].DefaultValue = teamDropDownList.SelectedItem.Value.ToString();

現在、AND OLT.PK_OrganizationalTeam LIKE @orgTeamPK は意図したとおりに機能していません。

次のようなドロップダウン メニューがあります。[すべて選択]、[チーム A]、[チーム B]、...

ユーザーが [すべて選択] を選択すると、すべてのチーム、または NULL でチームに割り当てられていないチームが表示されます。現在、'%' を渡そうとしていますが、NULL は返されません。

私はこのようなことができます:

AND OLT.PK_OrganizationalTeam LIKE @orgTeamPK OR OLT.PK_OrganizationalTeam IS NULL

ただし、これは機能しません。ユーザーがチーム A を選択すると、@orgTeamPK が % から「チーム A」に再割り当てされ、チーム A とすべての null が返されるためです。

選択したときにチーム A のみを返し、[すべて選択] を選択したときにすべての NULL とすべてのチームを返すようにするにはどうすればよいですか?

4

1 に答える 1

1
AND coalesce(OLT.PK_OrganizationalTeam,'') LIKE @orgTeamPK 

OR NULL空の文字列はチーム A/B の条件に一致しないため、これはオプションとまったく同じではありません。

于 2013-09-25T16:02:35.553 に答える