SQL SELECT多个标准IF不为空

时间:2014-09-02 08:54:25

标签: sql sql-server tsql

我有一个数据集,我想选择与输入值匹配的记录。但是我只想尝试将数据集中的字段与输入值匹配,如果数据集值不是NULL。

我总是提交所有4个输入值。 @Tyreid@CarId@RegionId@CarAgeGroup

因此,对于数据集中的第一条记录,如果输入值与RegionId和CarAgeGroup匹配,则会获得成功输出。

我无法弄清楚如何为这个SELECT创建SQL脚本?

我的数据集

TyreId  CarId   RegionId    CarAgeGroup
------  -----   --------    -----------
NULL    NULL    1084            2
65      35      1084            1
5       35      1084            1
NULL    41      1085            NULL
120     NULL    NULL            NULL
NULL    NULL    1084            2
65      NULL    1084            NULL

3 个答案:

答案 0 :(得分:2)

您可以使用ISNULL或Coalecse达到预期结果,如果Field为NULL,则将参数与参数进行比较。

Select * from aTable
Where ISNULL(Tyreid,@Tyreid)=@Tyreid
AND   ISNULL(CarId ,@CarId )=@CarId 
AND   ISNULL(RegionId,@RegionId)=@RegionId
AND   ISNULL(CarAgeGroup,@CarAgeGroup)=@CarAgeGroup

答案 1 :(得分:1)

请记住,NULL = <any value>会产生NULL,您需要分别检查NULL列值:

WHERE (TyreId      IS NULL OR TyreId      = @Tyreid)
AND   (CarId       IS NULL OR CarId       = @CarId)
AND   (RegionId    IS NULL OR RegionId    = @RegionId)
AND   (CarAgeGroup IS NULL OR CarAgeGroup = @CarAgeGroup)

答案 2 :(得分:0)

也许这就是你想要的?

SELECT * FROM YourTable 
WHERE (TyreId = @Tyreid OR TyreId IS NULL) 
    AND (CarId = @CarId OR CarId IS NULL) 
    AND (RegionId = @RegionId OR RegionId IS NULL) 
    AND (CarAgeGroup = @CarAgeGroup OR CarAgeGroup IS NULL) 

Sample SQL Fiddle