高手来看看··怎么优化这条sql语句!怎样效率最好!

xycit 2012-04-23 05:22:42

select *,
(select COUNT(1) from WMS_Package where ShipmentId=a.Id and Status='10') as WaitingShippedLoadScan,
(select COUNT(1) from WMS_Package where ShipmentId=a.Id and Status='20') as ShippedLoadScan
from WMS_Shipment a where a.Id in (select ShipmentId from WMS_Package where Status='10' or Status='20' group by ShipmentId)
...全文
79 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2012-04-23
  • 打赏
  • 举报
回复


select *,b.WaitingShippedLoadScan,b.ShippedLoadScan
from WMS_Shipment a ,
( select ShipmentId,
sum(case when Status=10 then 1 else 0 end)as WaitingShippedLoadScan,
sum(case when Status=20 then 1 else 0 end)as ShippedLoadScan,
from WMS_Package where Status='10' or Status='20'
group by ShipmentId
)b where a.Id =b.ShipmentId

--首先 这个看似可能快点,但是有可能执行计划和你写的一样
--其次
--1、如果Status是数值类型的那么不要给10加引号,如果是字符串的要加上引号,保持字段类型和变量类型一致
--2、id 和ShipmentId 要有索引会更快
迪迦凹凸曼 2012-04-23
  • 打赏
  • 举报
回复

select *,
(select COUNT(1) from WMS_Package where ShipmentId=a.Id and Status='10') as WaitingShippedLoadScan,
(select COUNT(1) from WMS_Package where ShipmentId=a.Id and Status='20') as ShippedLoadScan
from WMS_Shipment a where
EXISTS (SELECT 1 from WMS_Package where a.Id=ShipmentId Status='10' or Status='20' group by ShipmentId)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧