|
listagg+distinct
|
|||
---|---|---|---|
#18+
RenVoldСоздал таблицы TRANSACT_TEST. Код: plsql 1. 2. 3. 4. 5. 6. 7.
Наполнил ее. Код: plsql 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Наполнил... Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Задача: Нужно найти всех должников и вывести через запятую только те позиции, которые не оплачены. Т.е. MS_NUMBER через запятую. Если выполнить простой селект Код: plsql 1.
Видим. ID ID_CLIENT ID_MESSAGE SUMMA DATA_TRANSACT M_NUMBER217523 13504 140265 200 24-сен-2014 3190215075 13504 140265 -200 10-сен-2014 3190215484 13504 140655 -200 15-сен-2014 3279217524 13504 140655 200 24-сен-2014 3279217458 13504 141293 -200 23-сен-2014 3491 217459 13504 141294 -200 23-сен-2014 3493 217248 20940 133588 -150 19-сен-2014 2126217742 20940 133588 150 26-сен-2014 2126217800 20940 139946 180 27-сен-2014 3107214748 20940 139946 -180 05-сен-2014 3107217799 20940 139947 180 27-сен-2014 3108214749 20940 139947 -180 05-сен-2014 3108214753 20940 139949 -180 05-сен-2014 3109217798 20940 139949 180 27-сен-2014 3109217801 20940 140478 200 27-сен-2014 3244215328 20940 140478 -200 12-сен-2014 3244216510 20940 141133 -180 19-сен-2014 3413217807 20940 141133 180 27-сен-2014 3413216518 20940 141134 -180 19-сен-2014 3415217803 20940 141134 180 27-сен-2014 3415217802 20940 141135 180 27-сен-2014 3417216527 20940 141135 -180 19-сен-2014 3417217804 20940 141136 180 27-сен-2014 3419216532 20940 141136 -180 19-сен-2014 3419217805 20940 141137 180 27-сен-2014 3425216548 20940 141137 -180 19-сен-2014 3425216561 20940 141138 -180 19-сен-2014 3426217806 20940 141138 180 27-сен-2014 3426217713 20940 141458 -180 26-сен-2014 3851 217714 20940 141459 -180 26-сен-2014 3852 Выделенные жирным означают, что по этим позициям оплаты не было. (Нет пары у нее) И те, что жирным выделены должны отобразиться через запятую и показать суммарный долг по этим позициям. Т.е. хочу получить вот такой результат. (в столбце MS_NUMBER вместо точек - запятая) CLIENT MS_NUMBER TR_DATA FIO TELEFON ADRES DOLG20940 3851. 3852 26.сен.14 Андросов А. С. 24392 г. НеЗнай Где ул.Галактионова д.58 кв.6 -36013504 3491. 3493 23.сен.14 Бутакова Л. В. 50199 г. ЗнайГде ул.5 Линия д.14 кв. -400 Я попытался самостоятельно написать селект, который по идее должен дать результат как в приведенной таблице. Написал... Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Возвращает мне вот такую фигню.... (хотя это может и не фигня, а фигня в моей голове) CLIENT MS_NUMBER TR_DATA FIO TELEFON ADRES DOLG20940 2126.3107.3108.3109.3244.3413.3415.3417.3419.3425.3426.3851.3852 05-Сен-2014.12-Сен-2014.19-Сен-2014.26-Сен-2014.27-Сен-2014 Андросов А. С. 24392 г. ЗнайГде ул.Галактионова д.58 кв.6 -36013504 3190.3279.3491.3493 10-Сен-2014.15-Сен-2014.23-Сен-2014.24-Сен-2014 Бутакова Л. В. 50199 г. НеЗнайГде ул.5 Линия д.14 кв. -400 Меня это не устраивает. Как мне привести в тот вид, который показан в первой табличке? 1) сгрупировать (подзапрос) group by id_client, M_NUMBER HAVING SUM (tr.summa) < 0 2) group by id_client listagg(M_NUMBER,',') ps хочу получить tr_data -> c датами не понятно если не в один день 3851. 3852 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2014, 20:51 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
stax.., ой Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
ююююю stax ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2014, 21:02 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
ПроктологъMonteCarlosПроктологъ, давай, чувак, путай его, чем дольше RenVold пишет запрос, тем больше времени у Андросова и Бутаковой достать деньгиПутать будеш свою бабушку объясняя куда девалась ее пенсия, а разжевывать и ротврот передавать кашицу - свои птенцам когда вырастешьЧувак, тебе надо было семейным доктором идти работать, ты не ту професссию выбрал )) RenVold, вариант с аналитикой, может и лучше, хз Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
если дата конца периода попала между долгом и погашением (т.е. долг фактически погашен, но позже)? дата конца пусть будет 20.09.2014, m_number 3425 показывать ? если нет, то так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2014, 23:31 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
и да, если data_transact включает время, в where ее тоже надо trunc-нуть ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2014, 23:37 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
stax.., С датами в принципе, не так уж и важно. Но твой запрос реально работает и приводит к тому что мне нужно )))) Спасибо! Так просто! Жму твою руку! ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2014, 11:07 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
MonteCarlos, О! Ваш вариант тоже работает. ))) Мне тоже нравится. С использованием partition by смотрится... и сразу чувствуется, что писал спец с глубоким пониманием тай SQL ))) Правда, я не понял назначение динамического столбца N они принимают значения 1 и 2. Поясни мне смысл. И еще... "если дата конца периода попала между долгом и погашением (т.е. долг фактически погашен, но позже)? дата конца пусть будет 20.09.2014, m_number 3425 показывать ? " По идее не показывать. ХЗ. Мне не ставили такое условие, но твое замечание очень логичное ))) P.S. В примере я привел упрощенную модель данных. В принципе у клиента может за один и тот же выбранный период времени по одной и той же позиции образоваться несколько задолженностей. Не обязательно, что за выбранный период все будет погашено Например. ID_операции ID_клиента Номер_позиции Дата_транзакции Сумма 1 123 256 01.09.2014 -1502 123 256 07.09.2014 -1503 123 256 14.09.2014 -2004 123 256 16.09.2014 1505 123 256 17.09.2014 -1507 123 512 07.09.2014 -1808 123 512 11.09.2014 -200 и.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2014, 11:23 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
RenVold, ответьте себе на вопрос 16904156 а потом пишите авторС использованием partition by смотрится... и сразу чувствуется, что писал спец с глубоким пониманием тай SQL ))) п.с. я не проктолог, если что, и даже не серый. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2014, 12:31 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
K790RenVold, ответьте себе на вопрос 16904156 а потом пишите авторС использованием partition by смотрится... и сразу чувствуется, что писал спец с глубоким пониманием тай SQL ))) п.с. я не проктолог, если что, и даже не серый. Значит ты клон. ДА и просто заёба грешная ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2014, 12:58 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
я не парился и написал свою аггрегатную функцию - listagg_unique. Всё остальное - костыли. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 15:51 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
dakeirasя не парился и написал свою аггрегатную функцию - listagg _unique . Всё остальное - костыли.Ну естественно лучше наплодить сущностей без необходимости чем узнать, что в пользовательский агрегат можно вставить distinct. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 16:08 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
Поднимем тему: нужда заставила найти вариант без ограничения на 4K: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:18 |
|
listagg+distinct
|
|||
---|---|---|---|
#18+
MazoHist, много реплейсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:35 |
|
|
start [/forum/topic.php?fid=52&startmsg=38816681&tid=1881599]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 439ms |
0 / 0 |