2017-04-25 196 views
0

我在使用SP的SSRS中有一个@AgentGroup参数。SQL如何包含和排除空值在where子句中

我想要做的是如果参数传递一个值PREPB_STRSTR,NULL它也会显示空值。我想在我的where子句中增加一个OR @AgentGroup is null,但如果参数只传递一个值PREPB_STRSTR它会显示空数据。

DECLARE @DateTo date = '3/21/2017', 
@DateFrom date = '3/21/2017', 
@VHGroup nvarchar(max) = 'PREPB_STRSTR,NULL' 


    SELECT 
    [AgentIRACGroup] 
    ,[CallOutCallID] 
    ,[CallOutDateTime] 
    ,[OutboundDuration] 
    ,[CallOutNumber] 
    ,[AgentName] 
    ,[CallOutAgentID] 
    ,[AgentGroup] 
    ,[Outcome] 
    ,[TalkTime] 
    FROM [AgentStatisticsEOD].[dbo].[IRAC_Data] 
    WHERE CONVERT(Date,[SCBCallDateTimeRequest]) BETWEEN @DateFrom AND @DateTo 
    AND [AgentGroup] collate database_default in (SELECT value from dbo.FnSplit(@VHGroup,',')) OR [AgentGroup] is null 

我的查询将始终显示为空[AgentGroup]@Agentgroup不传递空值。

+0

是不是只是用更高的优先级和w.r.t.问题要么?我的意思是你不想'AND([AgentGroup] ...或[AgentGroup]为空)'? –

回答

2

解决这个问题最简单的方法是添加另一个条件检查参数实际上包含单词NULL

DECLARE @DateTo date = '3/21/2017', 
@DateFrom date = '3/21/2017', 
@VHGroup nvarchar(max) = 'PREPB_STRSTR,NULL' 


SELECT 
[AgentIRACGroup] 
,[CallOutCallID] 
,[CallOutDateTime] 
,[OutboundDuration] 
,[CallOutNumber] 
,[AgentName] 
,[CallOutAgentID] 
,[AgentGroup] 
,[Outcome] 
,[TalkTime] 
FROM [AgentStatisticsEOD].[dbo].[IRAC_Data] 
WHERE CONVERT(Date,[SCBCallDateTimeRequest]) BETWEEN @DateFrom AND @DateTo 
AND [AgentGroup] collate database_default in (SELECT value from dbo.Split(@VHGroup,',')) 
OR 
(',' + @VHGroup +',' LIKE '%,NULL,%' 
    AND [AgentGroup] is null 
) 
+0

你能解释一下吗? –

+0

你不明白哪部分?它基本上与问题中的查询相同,唯一的区别是'[AgentGroup]为空'只会影响结果,如果@ VHGroup'包含单词'NULL'。 –

+0

感谢。它只需要真实和真实 –