|
Интересный запрос
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть большая таблица с атрибутами физ. лиц. Каждый субъект характеризуется набором атрибутов (строки), сгруппированных в один блок. Блок атрибутов по каждому физику обязательно начинается с атрибута ID01 , и заканчивается одним из взаимоисключающих атрибутов [TR01, IP01, LE01, BC01] , в этих же атрибутах (TR01, IP01, LE01, BC01) содержится и ID самого субъекта. Атрибуты строго упорядочены по полю PK. Количество атрибутов внутри каждого блока может быть различным (но начальный и завершающий атрибуты - фиксированы). То есть, в таблице ниже мы видим 4 блока, соответственно 4 разных субъекта (PK: 2-5 ; 6-10 ; 11-15 ; 16-21). PK ATTR VALUE комментарий 2ID01Документ // начало блока 1 3NA01ФИО4AD01Адрес5TR01111 // конец блока 1 6ID01Документ 1 // начало блока 2 7ID02Документ 28NA01ФИО9AD01Адрес10IP01222 // конец блока 2 11ID01Документ // начало блока 3 12NA01ФИО13AD01Адрес 114AD02Адрес 215LE01333 // конец блока 3 16ID01Документ 1 // начало блока 4 17ID02Документ 218NA01ФИО19AD01Адрес 120AD02Адрес 221BC01444 // конец блока 4 Нужно построить запрос таким образом, чтобы каждый атрибут был однозначно отнесен к своему ID субъекта. Результат должен быть таким: PERSON_ID PK ATTR VALUE 1112ID01Документ1113NA01ФИО1114AD01Адрес1115TR011112226ID01Документ 12227ID02Документ 22228NA01ФИО2229AD01Адрес22210IP0122233311ID01Документ33312NA01ФИО33313AD01Адрес 133314AD02Адрес 233315LE0133344416ID01Документ 144417ID02Документ 244418NA01ФИО44419AD01Адрес 144420AD02Адрес 244421BC01444 Буду благодарен за помощь. SELECT , генерирующий тестовую выборку представленную выше: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 09:15 |
|
Интересный запрос
|
|||
---|---|---|---|
#18+
VanDOS, last_value ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 09:29 |
|
Интересный запрос
|
|||
---|---|---|---|
#18+
VanDOS, Код: 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. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.
ps конец группы не проверял если 12-я версия то возможно проще через match_recognize .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 09:30 |
|
|
start [/forum/topic.php?fid=52&msg=39894270&tid=1881818]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 269ms |
total: | 422ms |
0 / 0 |