2017-04-25 194 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

感謝。它只需要真實和真實 –