首页 > 解决方案 > 过滤 WHERE 子句上的 CASE 语句,包括变量

问题描述

当@BU = 'ES' 时,我想过滤掉'TR' 记录。这对“ES”非常有效,但是当我为另一个国家/地区运行此查询时,即“SE”,它不会返回我期望的行数。预期行数:28941 返回行数:28916

我知道这与“TR”的文件管理器有关。我如何让它像在西班牙一样工作,以及当我为其他 BU 运行它时。

仅需要为“ES”过滤掉“TR”。

declare @BU varchar(2);
set @BU = 'SE';

select case
           when @BU = 'ES' then
               p.PanelClass
           else
               'b'
       end as L1
from Panels                  p
    left outer join Slots    sl
        on sl.ID = p.ID
    left outer join Packages pa
        on pa.ID = p.ID
where p.Status = 1
      and case
              when @BU = 'ES' then
                  p.PanelClass
              else
                  'b'
          end <> 'TR';

标签: sqlsql-server-2012

解决方案


尝试

declare @BU varchar(2);
set @BU = 'SE';

select case
           when @BU = 'ES' then
               p.PanelClass
           else
               'b'
       end as L1
from Panels                  p
    left outer join Slots    sl
        on sl.ID = p.ID
    left outer join Packages pa
        on pa.ID = p.ID
where p.Status = 1
      and 'TR' <> case when @BU = 'ES' then p.PanelClass else 'b' end;

推荐阅读