0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
|
|
1 | |
Нужно оптимизировать SQL запрос12.04.2017, 22:40. Показов 1764. Ответов 7
Метки нет (Все метки)
Есть такой запрос:
INSERT INTO DMZ (DDM,NDM,PR) SELECT GETDATE() DDM, (isnull((SELECT MAX(NDM) FROM DMZ),0)+1) NDM, CASE WHEN isnull((SELECT COUNT() FROM DMZ WHERE PR=1),0)>isnull((SELECT COUNT() FROM DMZ WHERE PR=2),0) THEN 2 ELSE 1 END Изначальное задание такое: Скопировать строки из одного документа в другой с игнорированием дубликатов. 1)Скопировать из документа с минимальным номером. 2) В документ с максимальным номером. 3) Считать, что в заголовке есть по крайней мере одна запись. 4)При добавлении пропускать (не добавлять) строки по товарам ,которые уже есть. Таблица DMZ - документ.DDM - дата, NDM- номер документа,PR - приход/расход товара(1- приход, 2 - расход) Вопрос таков : Как можно с целью оптимизации запроса избавиться от подзапросов, получая значения для полей вставляемых записей одной инструкцией SELECT. ?
0
|
12.04.2017, 22:40 | |
Ответы с готовыми решениями:
7
Как оптимизировать sql-запрос? Нужно составить SQL запрос с выборкой из разных таблиц SQL подобные запросы к гугл таблицам. Нужно составить запрос SQL запрос. Из названия нужно убрать лишнее слова по списку из другой таблицы |
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
|
|
13.04.2017, 00:08 | 2 |
не имеющий никакого отношения к первоначальному заданию?
ЕСЛИ DMZ таблица документов, то их трогать не нужно, нужно копировать записи из подчиненной таблицы, про структуру которой у вас ни слова, а если это уже подчиненная таблица, то откуда у каждой записи дата? и где атрибут товара, строки по которым надо пропускать, если они есть? Не зная структуры вообще запрос написать нельзя, а вам ещё и оптимальный нужен
0
|
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
|
|
13.04.2017, 11:02 | 3 |
Это точно на русском языке написано?
Ничего непонятно. Может, простым языком расскажете, что надо? С примером?
0
|
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
|
|
18.04.2017, 16:01 [ТС] | 4 |
В общем...Сейчас от меня следует огроменное извинение. Будучи в сосем сонном состоянии я перепутала задание и вставила совсем не то.
Если это еще что-то читает, вот задание, которое до сих пор не очень нужно решить: Добавить новый заголовок документа (одной командой insert) -Номер документа = последний номер документа+1 -Дата=текущая дата -Тип=расход,если документов типа "приход "больше ,чем документов типа "расход".В противном случае тип=приход. -Учесть,что в таблице DMZ изначально может не быть ни одной строки. Таблица DMZ - документ.DDM - дата, NDM- номер документа,PR - приход/расход товара.Вставляю диаграмму бд , если чем-то поможет. Запрос работает , но его нужно немного оптимизировать,заменив два запроса в операторе CASE на один. Как это можно сделать?
0
|
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
|
||||||
18.04.2017, 16:58 | 5 | |||||
Сообщение было отмечено qrbio как решение
Решение
2
|
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
|
|
18.04.2017, 17:14 [ТС] | 6 |
Ругается на скобки
WHEN ISNULL(SUM(CASE PR WHEN 1 THEN 1 ELSE 0), 0) > ISNULL(SUM(CASE PR WHEN 2 THEN 1 ELSE 0), 0) Добавлено через 5 минут Пишет , что неверный синтаксис около этих двух скобок.
0
|
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
|
|
18.04.2017, 17:19 | 7 |
end-ов не хватает закрывающих после 0-ей
0
|
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
|
|
18.04.2017, 17:37 [ТС] | 8 |
Все равно ругается(
А каким-то таким подходом, как здесь , нельзя сделать? SELECT t.NTOV, SUM(s.KOL*(1-(d.PR-1)))-SUM(s.KOL*(d.PR-1)) as KOL, SUM(s.CENA*(1-(d.PR-1)))-SUM(s.CENA*(d.PR-1)) as SUMMA FROM DMS s INNER JOIN TOV t on t.KTOV=s.KTOV INNER JOIN DMZ d on d.NDM=s.NDM GROUP BY t.NTOV ORDER BY t.NTOV Тут определяется количество и сумма остатка (если 1 - приход, 2 - расход) Добавлено через 5 минут Хотя, вы вроде так и сделали ... Сори Только ошибку так и не могу убрать Добавлено через 5 минут Все,ошибку нашла. Спасибо вам большое! Теперь разобралась с этим запросом, а дополнительно узнала и что такое PIVOT, как его заменять на кейсы и наоборот.
0
|
18.04.2017, 17:37 | |
18.04.2017, 17:37 | |
Помогаю со студенческими работами здесь
8
Оптимизировать запрос Оптимизировать запрос! Оптимизировать запрос Помоги оптимизировать запрос Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |