declare @bid varchar(4) = '1007'
select sr.release_date,
sr.customer_id,
sr.customer_name,
sr.item_id,
sr.item_desc,
sr.order_no,
sr.qty_on_hand,
sr.release_qty,
sr.qty_after_released,
sr.extended_sell,
sr.enough,
sr.route_description
from sri_schedule_releases_view as sr
where
((case
when sr.route_code in ('pm 01','pm 03','pm 05') then (select users.contact_id from users where users.delete_flag = 'n' and users.name = 'John')
end = @bid) or
(case
when sr.route_code in ('pm 01','pm 03','pm 05') then (select users.contact_id from users where users.delete_flag = 'n' and users.name = 'Jane')
end = @bid) or
(case
when sr.route_code in ('pm 01','pm 03','pm 05') then (select users.contact_id from users where users.delete_flag = 'n' and users.name = 'Doe')
end = @bid) or
(sr.contact_id = @bid))
order by sr.item_id asc
此查询工作正常。但我只想显示sr.route_description
谁拥有sr.route_code
PM 01、PM 03和PM 05。
有没有可能做到这一点?
您只需要在列表中添加一条
case
语句select
:我找到了一个解决方案,它按我的预期工作
如果您只想在数据存在时显示该列,那么可以在 IF 语句中创建一个具有两种可能性的函数:
IF 数据存在(运行正常查询) ELSE
(复制相同的查询但没有空列)
代码太多——只需创建一个包含整个结果集的临时表。