在同一列上使用3个可选参数筛选数据的SQL查询
假设我的表有一个列ProfileID&我想用ProfileID进行筛选。 在存储过程中,我发送@PageID、@GroupID、@ChannelID(所有3个参数都是可选的,如果不发送,那么这些值默认为0)以过滤出实际为ProfileID的数据。因此,实际上我想用WHERE ProfileID(@PageID、@GroupID、@ChannelID)过滤数据但如果所有3个参数均为0,则我将不过滤任何内容。我将过滤当且仅当至少1个参数大于0时 表结构在同一列上使用3个可选参数筛选数据的SQL查询,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,假设我的表有一个列ProfileID&我想用ProfileID进行筛选。 在存储过程中,我发送@PageID、@GroupID、@ChannelID(所有3个参数都是可选的,如果不发送,那么这些值默认为0)以过滤出实际为ProfileID的数据。因此,实际上我想用WHERE ProfileID(@PageID、@GroupID、@ChannelID)过滤数据但如果所有3个参数均为0,则我将不过滤任何内容。我将过滤当且仅当至少1个参数大于0时 表结构 +--------+-------------
+--------+-----------------+---------------------+
| PostID | PostDescription | PostType ProfileID |
+--------+-----------------+---------------------+
| 25151 | Messed up | S 117 |
| 25152 | Messed up | S 116 |
| 25153 | Messed up | S 119 |
| 25154 | Messed up | S 11 |
| 25155 | Messed up | S 16 |
| 25157 | Messed up | S 23 |
| 25158 | Messed up | S 22 |
| 25159 | Messed up | S 7 |
| | | |
+--------+-----------------+---------------------+
例
在WHERE条件下如何实现这一点?只需使用
或
:
WHERE ProfileID IN(@PageID,@GroupID,@ChannelID )
OR COALESCE(@PageID,@GroupID,@ChannelID) is null
如果参数为空,如果参数为0
,则在上面:
WHERE ProfileID IN(@PageID,@GroupID,@ChannelID )
OR (@PageID = 0 AND @GroupID = 0 AND @ChannelID = 0)
只需使用
或:
WHERE ProfileID IN(@PageID,@GroupID,@ChannelID )
OR COALESCE(@PageID,@GroupID,@ChannelID) is null
如果参数为空,如果参数为0
,则在上面:
WHERE ProfileID IN(@PageID,@GroupID,@ChannelID )
OR (@PageID = 0 AND @GroupID = 0 AND @ChannelID = 0)
您可以为此使用大小写
构造。添加所有这些参数,并检查其是否大于0,我猜它们都是int数据类型,因此,在@PageID+@GroupID+@ChannelID>0处,您可以使用大小写
构造。添加所有这些参数,并检查其是否大于0,我猜它们都是int数据类型,因此@PageID+@GroupID+@ChannelID>0处的0不为空。谢谢它的工作,我想。这很容易,但我很困惑该怎么办。lol.0不是空的。谢谢它的工作,我想。这很容易,但我很困惑该怎么办。英雄联盟