Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
есть 2 таблицы schet62_01 и schet62_02 с такой структурой Kontragent | dogovor | summa надо сделать отчёт в котором будут эти счета колонками, и сгруппировать по контрагенту и договору делаю так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. вроде работает, но теперь надо отфильровать по тем контрагентам у которых остатки и на 62.01 и на 62.02 собственно вопрос как? если сделать having то тогда будет фильтроваться и по договорам, а надо только по контрагентам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2006, 16:51 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
наверное плохо объяснил, ещё раз попытаюсь в результате моего запроса получается вот такая таблица Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. надо так отфильтровать запрос так чтобы остался только контрагент3, потому что у него есть и сумма1 и сумма2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2006, 12:40 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Работать будет, но медленно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2006, 15:45 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Andrew SagulinРаботать будет, но медленно. Код: plaintext 1. 2. 3. 4. 5. Сам додумаешься или подсказать ;) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 06:08 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор КоневНу, в целом, Вы в правильном направлении идёте, товарищ! Вот только немного ещё подумать и будет вполне нормальный и очень неплохо работающий вариант. Сам додумаешься или подсказать ;) ? Не додумаюсь, подскажи. :) Я перепробовал несколько вариантов и везде получается больше двух вложенных подзапросов, что есть не гуд и медленно. Кстати, у меня складывается (возможно обманчивое) впечатление, что здесь что-то не то с нормализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 08:09 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Andrew SagulinНе додумаюсь, подскажи. :) Во-первых, нужно отказаться от использования группировки; во-вторых, проверку наличия остатков нужно снести во фразы WHERE соответствующих секций UNION, а саму проверку сделать посредством [NOT] EXISTS. Надеюсь мысль понятна? Это НЕ ПОЗВОЛИТ уйти от подзапросов, но позволит ЗНАЧИТЕЛЬНО облегчить жизнь серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 08:29 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Ой, про группировку, возможно, поторопился. Все зависит от того, сколько строк с остатками по каждому договору может быть в каждой из таблиц. Если строк может быть больше, чем одна, то группировка просто необходимо. Так что пока остается только второе - избавиться от HEAVING, а проверку делать в WHERE. ----------------------------------------------------------------------------------------------------------------------------------------- З.Ы. Неспешно ищу работу, согласен на переезд в Москву или Питер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 08:33 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор Конев ... во-вторых, проверку наличия остатков нужно снести во фразы WHERE соответствующих секций UNION, а саму проверку сделать посредством [NOT] EXISTS. Надеюсь мысль понятна? Это НЕ ПОЗВОЛИТ уйти от подзапросов, но позволит ЗНАЧИТЕЛЬНО облегчить жизнь серверу. Мысль мне понятна (...наверное :) ), но вот выгода сомнительна. Если вынести подзапрос в where, то серверу придётся выполнять подзапрос для каждой строки таблицы счетов. И ещё неизвестно, что выйдет дешевле: результирущая сортировка (для группировки) и несколько подзапросов в having для относительно небольшой сгруппированной таблицы, или большое количество подзапросов и группировка малого количества данных. Впрочем, не зная реального распределения данных, трудно судить о выгодах... Я тут ещё думал в следующем направлении: если сочетание контрагент/договор не может проходить одновременно по двум счетам, то группировку можно делать сразу по таблицам счетов, а потом объединять результат. В результате серверу придётся группировать две меньших выборки, а потом их объединять, что легче (в log(N) раз), чем группировать одну большую выборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 09:47 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Andrew SagulinВпрочем, не зная реального распределения данных, трудно судить о выгодах...Совершенно полностью согласен. С одной стороны имеем сортировку и последующую агрегацию большого массива данных + фильтрация полученного результата. С другой стороны - предварительныя фильтрация данных + последующая сортировка и группировка. При разных раскладах предпочтительней могут оказаться разные методы. Но остаюсь при своем мнении - я бы предпочел тот вариант, на который тебя упорно пытаюсь натолкнуть :) Могу, конечно, на досуге сделать тест-кейс и проверить оба варианта, но если честно, то лично мне лень это делать за автора вопроса... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 10:56 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
ну в конце концов я сделал так, select kontragent, dogovor, sum(summa62_01), sum(summa62_02) from (select kontragent, dogovor, summa as summa62_01, 0 as summa62_02 from schet62_01 union all select kontragent, dogovor, 0 as summa62_01, summa as summa62_02 from schet62_02) as s where kontragent in (select kontragent from schet62_01) and kontragent in (select kontragent from schet62_02) group by kontragent, dogovor Andrew Sagulin натолкнул на мысль, первый вариант даже стыдно показывать. Работает с нормальной скоростью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 11:55 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
angroну в конце концов я сделал так, select kontragent, dogovor, sum(summa62_01), sum(summa62_02) from (select kontragent, dogovor, summa as summa62_01, 0 as summa62_02 from schet62_01 union all select kontragent, dogovor, 0 as summa62_01, summa as summa62_02 from schet62_02) as s where kontragent in (select kontragent from schet62_01) and kontragent in (select kontragent from schet62_02) group by kontragent, dogovor Andrew Sagulin натолкнул на мысль, первый вариант даже стыдно показывать. Работает с нормальной скоростью.НУ, оно немного через не то место работает. Вот так будет более по-человечески: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Вот только я-таки вот такое решение хотел увидеть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 12:09 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
спасибо, так лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 12:17 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор Конев[quot angro]ну в конце концов я сделал так, ... А что делать, если контрагент фигурирует в другом счёте, но сумма остатка таки равна нулю, Например, Код: plaintext 1. 2. 3. 4. 5. Или это невозможно по условиям задачи (я в бухгалтерии не силён)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 13:54 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
не должно быть, но возможно. Ничего критического не случится просто в отчёте будет пустая строчка. Да твой вариант это предусматривает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 14:15 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Andrew Sagulin Владимор Конев angroну в конце концов я сделал так, ... А что делать, если контрагент фигурирует в другом счёте, но сумма остатка таки равна нулю, Например, Код: plaintext 1. 2. 3. 4. 5. Или это невозможно по условиям задачи (я в бухгалтерии не силён)?А собственно в чем проблема-то? Никто же не мешает добавить дополнительное условие в проверку EXISTS. Ну типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 04:47 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Владимор КоневНикто же не мешает добавить дополнительное условие в проверку EXISTS. Ну типа такого: Ой, чуть-чуть не дописал запрос :) Забыл во второе условие having добавить "неравно нулю". Вот так оно будет правильней: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 04:49 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Кажись понял, в чем мой косяк :) Вот это условие в исходной постановке задачи я так и не заметил: angroесли сделать having то тогда будет фильтроваться и по договорам, а надо только по контрагентам. Вот что значит "хорошо отдохнуть" :) ----------------------------------------------------------------------------------------------------------------------------------------- З.Ы. Неспешно ищу работу, согласен на переезд в Москву или Питер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 04:52 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
авторА что делать, если контрагент фигурирует в другом счёте, но сумма остатка таки равна нулю, Например, контрагент3 | договор1 | 10 | 0 ------------------------------------------- контрагент3 | договор2 | 0 | -10 ------------------------------------------- контрагент3 | договор3 | 0 | 10 ------------------------------------------- после того как подумал, понял что в этом случае тоже должно попадать в отчёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 09:25 |
|
||
|
помогите с запросом
|
|||
|---|---|---|---|
|
#18+
angroпосле того как подумал, понял что в этом случае тоже должно попадать в отчётНу тогда мой параноидальный вариант тебе должен подойти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 09:57 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33946160&tid=2006131]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
140ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 456ms |

| 0 / 0 |
