SQL多个if语句,相同的结果集,不同的参数

时间:2013-02-05 00:35:51

标签: sql function dry

我正在编写一个存储过程来计算一堆不同的东西,但我有一点,它重复了大约9次。

例如:

if @argA = 1 (true)
select Count(samples) from dbo.X where type = @argAType

if @argB = 1 (true)
select Count(samples) from dbo.X where type = @argBType

if @argC = 1
select Count(samples) from dbo.X where type = @argCType

依旧......

如何编写一个函数(或类似的东西),我可以传递一些(true或false)和其他参数,并且只返回结果集,如果是真的???

1 个答案:

答案 0 :(得分:1)

这是你要找的吗?这是我可以根据当前发布的问题推断出的最佳效果。

SELECT COUNT(samples)
FROM dbo.X
WHERE
    (type=@argAType AND @argA=1)
    OR
    (type=@argBType AND @argB=1)
    OR
    (type=@argCType AND @argC=1)

在功能形式中,我认为这是对的:

CREATE FUNCTION GetCount(@n AS BIGINT) RETURNS BIGINT
AS
BEGIN
  DECLARE @count BIGINT

  SELECT @count = COUNT(samples)
    FROM dbo.X
    WHERE
        (type=@argAType AND @argA=1)
        OR
        (type=@argBType AND @argB=1)
        OR
        (type=@argCType AND @argC=1)

  RETURN @count
END