DECLARE @run_date DATETIME
SELECT @run_date = '2016/05/30'
SELECT PAYMENT_LINE.active,
PAYMENT_LINE.alloc_date,
PAYMENT_LINE.allocation_ind,
PAYMENT_LINE.amount,
PAYMENT_LINE.fund_charge_id,
PAYMENT_LINE.paid_td,
PAYMENT_LINE.payment_id,
PAYMENT_LINE.payment_line_id,
PAYMENT_LINE.payment_type_code,
PAYMENT_LINE.period,
PAYMENT_LINE.reference_id,
PAYMENT_LINE.reversal_date,
PAYMENT_LINE.src_id
INTO #pym
FROM PAYMENT_LINE
WHERE alloc_date IS NOT NULL
AND alloc_date < @run_date
/*DELETE FROM #pym WHERE reversal_date IS NULL*/
DELETE
FROM #pym
WHERE reversal_date > @run_date
SELECT payment_id,
Total = SUM(amount)
INTO #pym1
FROM #pym
GROUP BY
payment_id
SELECT PAYMENT.payment_id,
PAYMENT.payment_amount,
Total
INTO #pym2
FROM #pym1,
PAYMENT
WHERE PAYMENT.payment_id = #pym1.payment_id
GROUP BY
PAYMENT.payment_id
HAVING Total > PAYMENT.payment_amount
SELECT MANUFACTURER.manufacturer_id,
MANUFACTURER.manufacturer_name,
alloc_date,
PAYMENT.payment_id,
PAYMENT.payment_amount,
Total
INTO #pym3
FROM #pym2,
PAYMENT,
MANUFACTURER,
PAYMENT_LINE
WHERE Total > PAYMENT.payment_amount
SELECT payment_id,
Total_payment = SUM(payment_amount - Total)
INTO #pym4
FROM #pym3
GROUP BY
payment_id
SELECT MANUFACTURER.manufacturer_id,
MANUFACTURER.manufacturer_name,
alloc_date,
PAYMENT.payment_id,
PAYMENT.payment_amount,
Total,
Total_payment
FROM #pym4,
#pym2,
PAYMENT,
MANUFACTURER,
PAYMENT_LINE
ответ
Я взглянул на этот запрос, и это не имеет большого смысла, без дополнительной информации. Первые три запроса;
SELECT PAYMENT_LINE.active,
PAYMENT_LINE.alloc_date,
PAYMENT_LINE.allocation_ind,
PAYMENT_LINE.amount,
PAYMENT_LINE.fund_charge_id,
PAYMENT_LINE.paid_td,
PAYMENT_LINE.payment_id,
PAYMENT_LINE.payment_line_id,
PAYMENT_LINE.payment_type_code,
PAYMENT_LINE.period,
PAYMENT_LINE.reference_id,
PAYMENT_LINE.reversal_date,
PAYMENT_LINE.src_id
INTO #pym
FROM PAYMENT_LINE
WHERE alloc_date IS NOT NULL
AND alloc_date < @run_date
DELETE
FROM #pym
WHERE reversal_date > @run_date
SELECT payment_id,
Total = SUM(amount)
INTO #pym1
FROM #pym
GROUP BY
payment_id
Может ли это быть объединено в это;
SELECT payment_id,
Total = SUM(amount)
INTO #pym
FROM PAYMENT_LINE
WHERE alloc_date IS NOT NULL
AND alloc_date < @run_date
AND reversal_date <= @run_date
GROUP BY payment_id
Вам действительно нужно прочитать правильный синтаксис соединения, здесь вы используете действительно старый синтаксис;
SELECT PAYMENT.payment_id,
PAYMENT.payment_amount,
Total
INTO #pym2
FROM #pym1,
PAYMENT
WHERE PAYMENT.payment_id = #pym1.payment_id
GROUP BY
PAYMENT.payment_id
HAVING Total > PAYMENT.payment_amount
Пожалуйста, прочитайте Аарон Bertrands статьи здесь http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx
Кроме того, необходимо обратить внимание на декартовой присоединяется и то, что они влекут за собой, окончательный запрос будет испортить ваши данные во многих отношениях;
SELECT MANUFACTURER.manufacturer_id,
MANUFACTURER.manufacturer_name,
alloc_date,
PAYMENT.payment_id,
PAYMENT.payment_amount,
Total,
Total_payment
FROM #pym4,
#pym2,
PAYMENT,
MANUFACTURER,
PAYMENT_LINE
Вы должны также ознакомиться с использованием псевдонимов таблиц, это упростит вашу роль в долгосрочной перспективе;
Я думаю, что нужно пересмотреть то, что вы пытаетесь сделать, и спросить себя, нужна ли логика временной таблицы вы используете. Для меня это похоже на то, что ваши данные будут полным беспорядком. Подумайте, можно ли все это поместить в один запрос с каждым разделом, являющимся подселектором, к которому вы присоединяетесь, чтобы получить нужные вам данные;
http://www.techrepublic.com/article/use-sql-subselects-to-consolidate-queries/
- 1. Sybase хранимая процедура занимает слишком много времени
- 2. Процедура занимает много времени
- 3. Хранимая процедура SQL Server 2012 занимает слишком много времени
- 4. Sql хранимая процедура занимает много времени для выполнения
- 5. Эта хранимая процедура правильная?
- 6. Процедура SQL занимает очень много времени?
- 7. PLSQL Процедура занимает много времени для выполнения
- 8. Процедура занимает много времени при одновременных запросах
- 9. Как эта Хранимая процедура ошибочна?
- 10. Почему хранимая процедура переменной tablle занимает больше времени для выполнения, чем хранимая процедура temp-таблиц
- 11. Выход Oracle Cursor занимает много времени
- 12. Почему эта функция занимает много времени сверхурочного времени
- 13. SQL Server Хранимая процедура занимает слишком много времени для извлечения данных из базы данных
- 14. Почему хранимая процедура, выполняемая через ADO.NET, занимает много времени дольше, чем SQL Server Management Studio?
- 15. Почему эта хранимая процедура не работает?
- 16. Работает ли эта хранимая процедура mySQL?
- 17. Эта хранимая процедура безопасна от SQL-инъекции?
- 18. Почему эта хранимая процедура возвращает пустой набор?
- 19. Почему эта хранимая процедура возвращает пустой результат?
- 20. Почему эта хранимая процедура MySQL не работает?
- 21. Почему эта хранимая процедура SQL не работает?
- 22. SQL-сценарий занимает много времени для запуска
- 23. Application.DoEvents занимает много времени
- 24. Совокупные занимает много времени
- 25. SelectedIndexChanged занимает много времени
- 26. NSURLConnection занимает много времени
- 27. GraphAlgoFactory.allSimplePaths занимает много времени
- 28. CoCreateInstance занимает много времени
- 29. presentModalViewController занимает много времени
- 30. @synchronized занимает много времени
[Вредные привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using -old-style-joins.aspx) - этот стиль таблиц * в стиле старого стиля * с заменой на запятую был заменен синтаксисом * надлежащего * ANSI 'JOIN' в стандарте ANSI - ** 92 ** SQL (** больше чем 20 лет назад), и его использование не рекомендуется –
Здесь вы делаете много бесполезной работы, почему бы вам продолжать создавать эти временные таблицы, а затем удалять их сразу? Просьба также предоставить некоторые типовые данные и ожидаемый результат. –
Последний 'SELECT' без каких-либо предикатов' JOIN' ... Почему? – Devart