根据条件使用不同列的SQL筛选器

根据条件使用不同列的SQL筛选器,sql,sql-server,Sql,Sql Server,我想根据条件筛选表。像- CREATE TABLE [dbo].[tblUserInfo]( [Id] [int] NOT NULL, [TypeName] [int] NOT NULL, [Value] [decimal](18, 2) NULL, [Name] [nvarchar](250) NULL, ) DECLARE @SearchText VARCHAR(250)='aa' SELECT *FROM tblUserInfo @Sear

我想根据条件筛选表。像-

   CREATE TABLE [dbo].[tblUserInfo](
   [Id] [int] NOT NULL,
   [TypeName] [int] NOT NULL,
   [Value] [decimal](18, 2) NULL,
   [Name] [nvarchar](250) NULL,
   ) 

 DECLARE @SearchText VARCHAR(250)='aa'

 SELECT *FROM tblUserInfo 
@SearchText具有文本,然后按TypeName列筛选, @SearchText为空,然后按名称列筛选

举个例子

我怎样才能做到这一点?提前谢谢

DECLARE @SearchText VARCHAR(250)='aa'

SELECT *FROM tblUserInfo 
WHERE CASE WHEN @SearchText IS NULL THEN Name ELSE 'a' END = CASE WHEN @SearchText IS NULL THEN 'hehe' ELSE 'a' END
AND 
(
    CASE WHEN @SearchText IS NOT NULL THEN TypeName ELSE 1 END = CASE WHEN @SearchText IS NOT NULL THEN 2 ELSE 1 END
    OR 
    CASE WHEN @SearchText IS NOT NULL THEN TypeName ELSE 1 END = CASE WHEN @SearchText IS NOT NULL THEN 3 ELSE 1 END
 )  
我试过了,有没有更好的办法


我试过这样做,有没有更好的解决方案?

您的where子句应该如下所示:

where (@SearchText is null and Name = '.....') --filter by Name
   or (@SearchText is not null and TypeName = '.....') --filter by TypeName

where子句应如下所示:

where (@SearchText is null and Name = '.....') --filter by Name
   or (@SearchText is not null and TypeName = '.....') --filter by TypeName

@SearchText为空,然后按名称过滤
,你要过滤的是
名称
?谢谢,我从@MichałTurczyn的答案中得到了解决方案。
@SearchText为空,然后按名称过滤
,你要过滤的是
名称
?谢谢,我从@MichałTurczyn的答案中得到了解决方案。