У меня есть этот запрос, где мне нужно отбросить данные из 3 таблиц, но есть некоторые группы, которые должны произойти. Я знаю, что подзапросы ужасны, но я не могу сделать это иначе. Это развалится, когда будет десятки и десятки тысяч строк. Может быть, я слишком усложняю это? Я попробовал «partition by», но это приведет к отмене всех строк из ERT1, что испортило бы подсчеты. Я не мог использовать группу, поскольку, если я буду группироваться в ERT1, это испортит ER1.Удалить подпрограммы из запроса выбора?
Я использую FK и индексы на соединенных полях.
У кого-нибудь есть мысли по этому поводу?
Было бы очень благодарно !!
SELECT ER.EventRegistrationID, DC.DiscountCodeID, DC.DiscountAmount, DC.DiscountCode, DC.ActiveFlag,
ISNULL((SELECT COUNT(ER1.EventRegistrationID)
FROM T_EventRegistration ER1
WHERE ER1.DiscountCode = DC.DiscountCode
AND ER1.EventID = DC.EventID
AND ER1.OrderCompleteFlag = 1),0) AS NumTimesUsed, --includes refunded orders
ISNULL((SELECT COUNT(ERT1.TicketNumber)
FROM T_EventRegistrationTickets ERT1, T_EventRegistration ER1
WHERE ER1.EventRegistrationID = ERT1.EventRegistrationID
AND ER1.DiscountCode = DC.DiscountCode
AND ER1.EventID = DC.EventID
AND ER1.OrderCompleteFlag = 1
),0) AS NumTicketsSold --excludes refunded tickets
FROM T_DiscountCodes DC, T_EventRegistration ER
WHERE DC.DiscountCode *= ER.DiscountCode
AND DC.EventID = 20188
AND DC.DeleteFlag = 0
AND DC.HiddenFlag = 0
AND ER.OrderCompleteFlag = 1
ORDER BY DC.DiscountCode, NumTimesUsed
Я не видел эту функцию раньше - это очень круто. Я предполагаю, что это намного быстрее, чем подзапрос? Это действительно делает одну и ту же концепцию, поэтому я спрашиваю. Спасибо! – Dennis
Я не знаю, насколько это помогает в вашем запросе tho, узнал об этом несколько дней назад. Вы должны проверить этот разговор https://www.youtube.com/watch?v=-m426WYclz8 – Hatsjoem
Это хорошее видео. Спасибо, что поделился! Это выглядит намного быстрее. Я зашел на свой производственный сервер - посмотрим, как он работает! Еще раз спасибо – Dennis