如何在SELECT语句中使用IF作为过滤器

时间:2017-06-07 11:36:45

标签: sql sql-server

我有一个共享相同表格和过滤器的simalary(但不完全相同)报告。我想创建一个并在带有参数的SELECT数据集之间切换而不是编写invidual存储过程。

我尝试过类似的事情:

IF @UseDataGroup = 1 --from ssrs
    BEGIN
    SELECT
        IF transaction_type IN (10, 27)
        .....
    END
IF @UseDataGroup = 2
    BEGIN
    SELECT
        IF transaction_type IN (11)
        .....
    END

    FROM

    WHERE

..遗憾地返回错误'多部分标识符transaction_type无法绑定' 任何帮助都会受到重视。感谢。

2 个答案:

答案 0 :(得分:0)

您可以在transaction_type声明的WHERE子句中使用来自SSRS的传入过滤器和SELECT上的过滤器

SELECT YourFields
FROM YourTable
WHERE (@UseDataGroup = 1 AND transaction_type IN (10, 27))
  OR (@UseDataGroup = 2 AND transaction_type = 11)
  --add additional filters as needed

答案 1 :(得分:0)

示例CASE声明

DECLARE @UseDataGroup INT
DECLARE @transaction_type INT

SET @UseDataGroup = 1
SET @transaction_type = 10

IF @UseDataGroup = 1 --from ssrs
    BEGIN
    SELECT
        CASE WHEN @transaction_type IN (10, 27)
        THEN 'Success'
        END
    END

OR

SELECT
    CASE WHEN @transaction_type IN (10, 27) AND @UseDataGroup = 1
    THEN 'Success'
    END