Используйте условный IF в предложении WHERE - PullRequest
0 голосов
/ 04 октября 2018

У меня есть простое предложение WHERE, например:

WHERE
    [T].[DesignKey] = 5232
    AND
    (
        [TT].[TaskTypeCategoryId] ='8f08640b-bc74-e811-80dc-509a4c609460'
        OR
        [TT].[TaskTypeCategoryId] = '15F1F492-0CAC-E811-8421-C81F66DACA6A'
    )
    AND
    [TA].[EmpKey] = 58

Теперь я хочу отфильтровать, если это условие истинно SecId > 4 Фильтровать по [TA].[EmpKey] = 58 Если нет, просто не применяйте этот фильтр такМне нравится:

WHERE
    [T].[DesignKey] = 5232
    AND
    (
        [TT].[TaskTypeCategoryId] ='8f08640b-bc74-e811-80dc-509a4c609460'
        OR
        [TT].[TaskTypeCategoryId] = '15F1F492-0CAC-E811-8421-C81F66DACA6A'
    )
    AND
    (
        E.SecID > 4
        OR
        (
            [TA].[EmpKey] = 58
        )
    )

Но это не работает, просто не применяется фильтр, если SecId идет с 5, что я делаю не так?Привет

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

У тебя почти было это с первой попытки.Вам просто нужно добавить условие, чтобы учитывать, когда SecID <= 4. Вы можете добавить еще пару строк, чтобы сделать это с вашим исходным запросом, например: </p>

WHERE
    [T].[DesignKey] = 5232
    AND
    (
        [TT].[TaskTypeCategoryId] ='8f08640b-bc74-e811-80dc-509a4c609460'
        OR
        [TT].[TaskTypeCategoryId] = '15F1F492-0CAC-E811-8421-C81F66DACA6A'
    )
    AND
    (
        E.SecID <= 4
        OR
        (
            E.SecID > 4
            AND
            [TA].[EmpKey] = 58
        )
    )
0 голосов
/ 04 октября 2018

Попробуйте это:

WHERE
    [T].[DesignKey] = 5232
    AND
    (
        [TT].[TaskTypeCategoryId] ='8f08640b-bc74-e811-80dc-509a4c609460'
        OR
        [TT].[TaskTypeCategoryId] = '15F1F492-0CAC-E811-8421-C81F66DACA6A'
    )
    AND 
    (
        CASE WHEN E.SecID > 4 THEN [TA].[EmpKey] ELSE 58 END = 58
    )

Если true, он отфильтруется с EmpKey = 58, если false, он просто скажет 58 = 58, что всегда будет true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...