0

我有一个 SQL 查询,我试图在我的选择中加入空响应的可能性。

最终,这将在 SSRS 报告中结束。

此查询工作正常,但将始终返回 p.ReferralReason 中的任何空值。如果@Reason 的值不是“%”,我希望不返回空值:

     DECLARE @Reason varchar(100)
     SET @Reason = 'Lost To Care'


     SELECT p.Person_ID, P.Person_Name, p.ReferralReason 
     FROM VIEW_Patient p
     WHERE 
        p.ReferralReason like '%' + @Reason + '%'

我想将所有原因与@Reason = '%' 如果@Reason 设置为'%',我想包括空值,但如果@Reason 设置为其他任何值,我不想包括空值。

这是我尝试过的,但它不起作用:

     DECLARE @Reason varchar(100)
     SET @Reason = '%'


     SELECT p.Person_ID, P.Person_Name, p.ReferralReason 
     FROM VIEW_Patient p
     WHERE 
        case   
            when @Reason = '%' then (p.ReferralReason like '%' + @Reason + '%' or p.ReferralReason is null)
            else p.ReferralReason like '%' + @Reason + '%'
        end 

微软 SQL Server 2008 R2。

4

1 回答 1

1

如果将这些NULL值替换为空字符串,它们将匹配完全由%但不包含被包围的其他字符串的模式%

SELECT p.Person_ID,
       P.Person_Name,
       p.ReferralReason
FROM   VIEW_Patient p
WHERE  ISNULL(p.ReferralReason, '') LIKE '%' + @Reason + '%' 
于 2013-08-28T16:29:49.963 回答