У меня есть этот SQL-запрос:комплекс SQL запросов - Time Out
WITH CTE(documents, pocname, pocphone, initialticketNo)
AS
(
SELECT
SO.Documents, SO.POCName, SO.POCPhone,
SUBSTRING(SO.Documents, 0, CHARINDEX('-', SO.Documents)) AS 'InitialCustomerTicket'
FROM
ServiceOrder SO
CROSS APPLY
(SELECT
COUNT(TECHNICIANTRIPDETAILID) TTL
FROM
TECHNICIANTRIPDETAIL
WHERE
SERVICEORDERID = SO.SERVICEORDERID
AND ISEQUIPMENTREPAIRED = 1) EQUIPMENT
INNER JOIN
Contract CON ON CON.ContractId = SO.ContractId
INNER JOIN
ClientProfile CP ON CP.ClientId = CON.ClientId
WHERE
CP.ClientId = 20739
AND SO.CloseStatus = 1
AND equipment.ttl > 0
AND ISNULL(SO.DOCUMENTS,'') <> ''
)
SELECT *
FROM cte
WHERE initialticketNo <> ''
Теперь в приведенном выше запросе, если вы видите, я вычислил одно поле initialticketno. Я хочу снова запустить запрос на одном и том же сервисе обслуживания стола и подсчитать количество каждого номера билета, начинающегося с initialticketno. Когда я делаю это, как показано ниже, это занимает много времени, есть ли способ упростить этот запрос?
WITH CTE(documents,pocname,pocphone,initialticketNo)
as
(Select SO.Documents,SO.POCName,SO.POCPhone,
SUBSTRING(SO.Documents,0,CHARINDEX('-',SO.Documents)) AS 'InitialCustomerTicket'
From ServiceOrder SO
CROSS APPLY (SELECT COUNT(TECHNICIANTRIPDETAILID) TTL FROM TECHNICIANTRIPDETAIL WHERE SERVICEORDERID = SO.SERVICEORDERID AND ISEQUIPMENTREPAIRED = 1) EQUIPMENT
Inner Join Contract CON ON CON.ContractId = SO.ContractId
Inner Join ClientProfile CP ON CP.ClientId = CON.ClientId
where CP.ClientId = 20739 AND SO.CloseStatus = 1 and equipment.ttl > 0 AND ISNULL(SO.DOCUMENTS,'') <> '')
select * from cte
cross apply (select count(serviceorderid) ttl from serviceorder so where so.documents like cte.initialticketNo + '%') as so
where initialticketNo <> '' and so.ttl > 1
PS: Всего записей в таблице сервисов составляет 75k.
Может ли кто-нибудь помочь мне в этом.
Как долго слишком долго, вы отменяя исполнения или она достигает кепку – JsonStatham
Он берет 3 до 4 минут время выполнения. –