У меня следующий запрос SQL
Declare @tempcalctbl Table
(
ItemId varchar(50),
ItemLocation varchar(50),
ItemNo varchar(50),
Width real,
Unit varchar(50),
date datetime
)
Insert Into @tempcalctbl
Select distinct SubId,ItemLocation,ItemNo,
(ABS((Select width From @temptbl a Where ItemProcess ='P1'and a.ItemId = c.ItemId
and a.ItemNo = c.ItemNo and a.ItemLocation = c.ItemLocation)
-(Select width From @temptbl b Where ItemProcess ='P2' and b.ItemId = c.ItemId
and b.ItemNo = c.ItemNo and b.ItemLocation = c.ItemLocation))) * 1000,
Unit,date
From @temptbl c
Group by ItemId,ItemLocation,ItemNo,Unit,date
Мне было интересно, как оптимизировать этот запрос.
Идея состоит в том, чтобы найти разную ширину (элемент p1 - элемент p2) между ItemProcess 'P1' и 'P2' в соответствии с тем же ItemID, тем же ItemNo и тем же ItemLocation.
У меня около 75000, и потребовалось более 25 минут, чтобы получить разницу в ширине для всех ItemId.
Я пытался использовать Group by для расчета ширины, но он возвращал бы несколько строк вместо просто значения, которое затем возвращало бы ошибку. Кстати, я использую MS SQL Server 2008, а @tempcalctbl - это таблица, которую я объявил в процедуре хранения.