Я все еще довольно новичок в SQL, поэтому я хотел знать, делаю ли я это наиболее оптимизированным способом.
SELECT DISTINCT ACCOUNTID, ACCOUNT_NAME
(SELECT COUNT(*)
FROM TICKET
WHERE (ACCOUNTID = OPPORTUNITY.ACCOUNTID)) AS [Number Of Tickets],
(SELECT COUNT(*)
FROM TICKET
WHERE (ACCOUNTID = OPPORTUNITY.ACCOUNTID) AND (STATUSCODE = 1 OR
STATUSCODE = 2 OR
STATUSCODE = 3)) AS [Active Tickets]
from OPPORTUNITY
where AccountID > @LowerBound and AccountID < @UpperBound
То, что я пытаюсь сделать, это получить список всех учетных записей и показать, сколько билетов у этой учетной записи и сколько активных (с кодом состояния 1, 2 или 3). Является ли выбор внутри выбора правильным способом или есть способ сделать это, используя что-то вроде group by.
Больше всего меня беспокоит скорость, для получения примерно 20 записей требуется 3-5 секунд, и запрос может иметь тысячи результатов.
Я не администратор базы данных, поэтому любые изменения в схеме таблиц не являются обязательными, но потребуют некоторой просьбы со стороны высшего руководства.
Это выполняется на SQL Server 2000.
EDIT--
поскольку все ответы, где спрашивая об этом, я проверил на этом. Обе возможности и индекс билета по восходящей.