|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
Доброго времени суток! Никак не получается отобразить результат в следующем виде: Основной запрос (zap1): какие-то строки из таблицы, где первым значением идут id и дата (даты могут быть с пропусками): select t1.id, t1.date1, t1.fld2, t1.fld3... from t1 order by t1.date1; Дополнительные запросы выдают значения, рассчитываемые подзапросами на основе данных основного запроса или других таблиц. Могут, для примера, быть вида: Select '1_1' s1_1 from dual или select t1.fld2*2 from zap1, либо значение одного из полей основного запроса. Надо вывести значения в табличном виде: Дата1 из основного запроса | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 1' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 2' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 3' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов Дата2 из основного запроса | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 1' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 2' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 3' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов и т.д. В идеале в конце ещё суммарный итог по каждому из столбцов. Алгоритм расчёта дополнительных значений по каждой дате одинаков, но может немного корректироваться в зависимости от даты. Предполагал использовать model, но не понял как соорудить такую конструкцию. Можно ли так сделать с помощью только SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 01:58 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
Опять попытки переложить на СУБД задачи, которые должна решать не она. Ну напишите динамический запрос. Поддерживать его все равно вам. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 09:32 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
dmdmdm, На PL-SQL понятно можно. Интересовало, можно ли на чистом SQL... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 10:06 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
На здоровье. Подзапросы, case. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 10:41 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
dmdmdm, наверное всё действительно просто, но если бы у меня получилось - я бы сюда не писал. Подозреваю, что case поможет, но как сделать именно такую структуру - пока не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 11:26 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001, Где тестовый набор данных? Где то что из него должно получиться в результате? Где ваш вариант решения задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 12:10 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, Тестовый набор и ожидаемые результаты описаны в первом посте. Если надо - позже сгенерю таблицу с исходными абстрактными данными. Реальную таблицу естественно светить нельзя, а решения пока нет. Только в pl/sql намечается, да и то много неизвестных подзапросов. Важен принцип: как вывести такую структуру ячеек с результатами любых подзапросов именно в таком виде. С данными я уже сам разберусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 22:14 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
'Доп строка 1' - это какое-то значение или просто пустышка типа "всё та же дата, что и выше"? Если дата, то почему бы ее не указать? Тогда будет проще. Алгоритм расчёта дополнительных значений по каждой дате одинаков, но может немного корректироваться в зависимости от даты. А вот это в простой запрос уже не ляжет, поскольку "тут играем, тут не играем, а тут рыбу заворачивали". Это либо в PL/SQL, либо в генератор отчётов - для того и делали их. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2020, 23:44 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001 Надо вывести значения в табличном виде: Дата1 из основного запроса | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 1' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 2' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 3' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов Дата2 из основного запроса | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 1' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 2' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов 'Доп строка 3' | Далее несколько столбцов с расчётными значениями (разные способы) из доп. запросов и т.д Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 01:46 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
Правильный Вася, 'Доп строка 1' - это литерал в 1 поле доп. строки. (см. решение ниже). От даты меняется матем. формула, это не смертельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 11:04 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, спасибо! Я был близок к подобному решению, но медленно думаю в SQL пока что. Адаптирую под себя - если что - напишу... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 11:06 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
Код: 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.
Не совсем то, но близко: Надо, чтобы даты в допах были не конкретные, а брались из выдачи t1, а формулы считались по этим взятым датам уже потом. Ещё формула может включать суммы значений ячеек из разные строк. Короче имитация Excel. Может сам догадаюсь как переделать, может подскажете... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 17:03 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
Надо, чтобы даты в допах были не конкретные, а брались из выдачи t1 Можно хоть черта лысого навертеть. Код: plsql 1. 2.
Сопровождать этот ужас все равно вам. Короче имитация Excel. Может, Excel сымитирует сам Excel ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 17:22 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
dmdmdm, к сожалению, надо пока без Excel. Внизу в формулах понятно, что можно навертеть. Важно, что не получится написать так: Код: plsql 1. 2. 3. 4.
или так: Код: plsql 1. 2. 3. 4. 5.
всю схему запроса надо видоизменять... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 17:38 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001, Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 17:47 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, Спасибо - супер! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 18:08 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, как ещё с вами связаться? Есть одно деловое предложение. Здесь нет личных сообщений... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 18:31 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001, Я на такое не подпишусь, есть раздел работа, можете там разместить свое предложение, кто ни будь да и откликнется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 18:38 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, Насчет работы понятно, хотя мне кажется вам бы это не составило особенного труда. Тогда вопрос по данному коду: как, не указывая конкретные значения даты и id, выбрать для текущего поля (например calculated_fld3) значение определенной Доп строки (n) из строки до текущей и после текущей? Понял только, что предыдущее значение fld3 без учета n можно найти так: lag(fld3,1) over (order by date1), а вот с определенной n как? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 23:02 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001 как, не указывая конкретные значения даты и id, выбрать для текущего поля (например calculated_fld3) значение определенной Доп строки (n) из строки до текущей и после текущей? Понял только, что предыдущее значение fld3 без учета n можно найти так: lag(fld3,1) over (order by date1), а вот с определенной n как? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 12:58 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001, Для lag и lead есть offset, его можно использовать если вы всегда знаете из какой именно по счету строки по отношению к текущей нужно взять значение. Analytic Functions Если вам нужно что то считать итеративно, можно пытаться прикрутить model, однако вам скорее всего будет намного проще и правильнее выгрузить подготовленные предварительные данные в коллекцию и просчеты сделать уже на коллекции используя императивный язык программирования. Ну и скорее всего самый правильный вариант, это выгрузить предварительно подготовленную выборку в Excel и уже встроенным VB забить в расчетные ячейки формулы, так по крайней мере пользователь будет понимать откуда взялась такая цифра в ячейке. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 13:32 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, про offset я знаю (спасибо за ссылку), но это же смещение внутри группы. А у нас получается две группы - сначала по date1, а внутри неё уже по n. Как сделать такую выборку? Про model смотрел, но что-то не совсем разобрался, подойдет ли она для моего случая. Если не получится сделать так (SQL) - придётся грубо копаться в коллекциях и пайповых функциях. В Excel пока нельзя, т.к. туда выгружается уже готовый отчёт из системы отчетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 15:28 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
ARRay001 но это же смещение внутри группы. Код: plsql 1.
поменять на Код: plsql 1.
либо, если получится выделить группы по какому то правилу, сделать синтетический идентификатор для окон и его указывать в partition by. PS: если у вас цепочки расчетов, т.е. необходимо для расчета следующей группы иметь результат расчета предыдущей, то делайте в PL/SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 18:14 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, lag(fld3,3) over (order by date1,n) к сожалению не подходит, т.к. берёт значение fld3, а не установленное в ходе работы запроса предыдущее значение fld3.n3. Или что надо указать в левой части lag(fld3,3)? да, цепочка, но на ближайшие группы (одна до и одна после). Т.е. например, calculated_fld3.n1тек_группы = calculated_fld3.n3пред_группы. Только pl/sql? сделать сквозную нумерацию, которую можно было бы использовать, пока не получилось, но бьюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 21:49 |
|
Добавление результатов других запросов в выдачу основного запроса (табличный вид)
|
|||
---|---|---|---|
#18+
graycode, получается, что надо использовать результаты, полученные в предыдущих итерациях цикла запроса - это скорее всего в SQL не выйдет. Если есть такой способ - это будет очень наворочено. Ещё подумаю немного и скорее всего перейду на pl/sql, как бы этого не хотелось избежать ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 23:52 |
|
|
start [/forum/topic.php?fid=52&msg=40008494&tid=1880795]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 271ms |
0 / 0 |