sql - 过滤 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';
解决方案
尝试
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;
推荐阅读
- c# - 为 SVG 图像添加轮廓边框
- html - 如何在左侧打开搜索栏
- arrays - 如何在 LC3 中设置 if/else 条件的同时遍历数组
- c - `clock` 是否测量 `sleep` 即暂停的线程?
- java - Google Pub/Sub 消息大约需要 5 分钟才能发布。这是为什么?
- javascript - Vue - 无法编译tiptap.esm.js
- javascript - [React]如何在 Vercel 上设置重写?
- android - RecyclerView 上的 Exoplayer
- android - xml中的渐变不会出现在按钮上
- html - 可滚动的背景图像仅覆盖页面的某些部分