|
|
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
В MS Access есть возможность создавать т.н. "перекрестные запросы", где число полей, также как и строк, зависит от содержания таблицы, т.е. значения какого-то поля выступают в роли имен полей выполненного запроса. Например в результате выполнения запроса TRANSFORM Max(prices.price) AS max_price SELECT prices.year FROM prices GROUP BY prices.year PIVOT prices.service; получаем двухмерную таблицу, где по строкам будут года, по столбцам услуги а на пересечении соответствующие цены. Подскажите пожалуйста, как подобное можно сделать в Oracle. Имеется ввиду именно представления данных в виде двухмерных таблиц, (т.е. расширения CUBE и ROLLUP не подходят, т.к. предоставляют только развертки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 07:29 |
|
||
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
Вопрос - какая клиентская часть будет использоваться, в принципе можно получать в списке выборки как-бы "переменное" количетво "полей" если использовать cast(multiset()) преобразование. Но к крос-таб репорту с access это никакого отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 07:51 |
|
||
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
если заранее неизвестно к-во столбцов, то ИМХО надо динамически создавать запрос и выполнять его ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 08:17 |
|
||
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
2 MaxU так мне представляется Сергей_ желает чтовы наименование колонок формировались из ЗНАЧЕНИЯ поля(ей) таблицы. Это правила крос-таб отчета. Но одновременно с тем это есть полный нонсенс с точки зрания и реляционной алгебры и реляционных отношений и языка SQL MS часто идет против стандартов - это уже как правило, не как исключение. Поэтому как мне видится, динамический SQL в данном случае не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 08:52 |
|
||
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
2 ShgGena, согласен! я не знаю как это сделать в общем случае. вот если число сервисов (prices.service) фиксировано, то это можно закодировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 11:45 |
|
||
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
"E pur si muove!" (и все таки она вертится!) (с) Джордано Бруно Код: 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. "Expert one to one Oracle", page 579 (c) Tom Kyte ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 12:14 |
|
||
|
Запросы с переменным числом полей
|
|||
|---|---|---|---|
|
#18+
Динамический SQL - тебя спасет ) Пример: Есть view test_view которая возвращает .... Id_tovar, name_tovar, id_client, name_client, price Необходим кростаб по вертикали клиенты по горизонтали товары .... на пересечении цена Динамически формируем SQL select name_client, decode(id_tovar, 1, price, null) tovar_name -- где tovar_name - имя товара с ID = 1 decode(id_tovar, 2, price, null) tovar_name -- где tovar_name - имя товара с ID = 2 decode(id_tovar, 5, price, null) tovar_name -- где tovar_name - имя товара с ID = 5 ... decode(id_tovar, n, price, null) tovar_name -- где tovar_name - имя товара с ID = n from test_view На выходе кростаб ... Я думаю, идея ясна ...))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2002, 19:30 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32080198&tid=1992425]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 339ms |

| 0 / 0 |
