过滤包含变量的WHERE子句的CASE语句

时间:2020-04-08 12:45:32

标签: sql sql-server-2012

当@BU ='ES'时,我想过滤掉'TR'记录。这对于'ES'来说效果很好,但是当我在另一个国家(即'SE')运行此查询时,它不会返回我期望的行数。 预期行数:28941 返回的行数:28916

我知道这与“ TR”的提交者有关。我该如何在西班牙使用它,以及在其他BU上运行它。

“ TR”仅需要针对“ ES”进行过滤。

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';

1 个答案:

答案 0 :(得分:1)

尝试

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;