使用 select 语句声明变量

时间:2021-03-30 14:50:27

标签: sql

我正在尝试声明一个值以使我的查询运行得更快。

我想存储 @driver_collected,所以我可以在下面查询 - 我希望我做对了。

这样我就可以为我们的客户提供更好的在线状态,区分“准备交货”和“待交货”之间的区别

declare @driver_collected int;
set @driver_collected = (select max(x.recieved) from entry_extra x inner join entry e2 on e2.entry_id = x.entry_id where e2.link_entry_id = e.entry_id),

select e.entry_id,e.taxpoint_date,
case
when e.delivery_method_id <> 3 @driver_collected is null
then 'Ready for Dispatch'
when e.delivery_method_id <> 3 @driver_collected is not null
then 'Out For Delivery'
else 'Test'
end
from entry e where e.entry_type in ('SORD','SRTN') and e.trader_id = 1203046

我希望我的结果是:

entry_id,taxpoint_date, Ready for Dispatch / Out For Delivery'

我的经验不足,不知道哪里出错了,非常感谢任何建议。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我稍微重构了查询以消除您的语法错误,在您的第一个查询中,您引用了您没有的别名 e,假设这应该是 x

declare @driver_collected int;
select @driver_collected=max(x.recieved)
from entry_extra x
inner join entry e2 on e2.entry_id = x.entry_id
  and e2.link_entry_id = x.entry_id 

select e.entry_id,e.taxpoint_date,
case
  when e.delivery_method_id <> 3 and @driver_collected is null
  then 'Ready for Dispatch'
  when e.delivery_method_id <> 3 and @driver_collected is not null
  then 'Out For Delivery'
else 'Test'
end as DeliveryStatus
from entry e 
where e.entry_type in ('SORD','SRTN') and e.trader_id = 1203046