|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Здравствуйте. есть два сформированных курсора. 1й курсор (пример данных) X | RN | Tip | TextX ---------------------------------------------- 100 | "r1" | 1 | "Текст строки1" 200 | "r1" | 2 | "Текст строки2" 300 | "r2" | 1 | "Текст строки3" 400 | "r2" | 2 | "Текст строки4" 2й курсор (пример данных) Y | RN | Tip | TextY ---------------------------------------------- 110 | "r1" | 1 | "Текст строки1" 310 | "r2" | 1 | "Текст строки2" 410 | "r2" | 2 |"Текст строки3" необходимо получить объединенную таблицу без дублей (Группировка происходит по RN и Tip.) X | Y | RN | Tip | TextX | TextY ------------------------------------------------------------------------ 100 | 110 | "r1" | "1" | "Текст строки" | "Текст строки" 200 | ----- | "r1" | "2 " | "Текст строки" | "Текст строки" 300 | 310 | "r2" | "1" | "Текст строки" | "Текст строки" 400 | 410 | "r2" | "2" | "Текст строки" | "Текст строки" Подскажите пожалуйста как можно провернуть такую штуку? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 01:41 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 09:09 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Дополняю: 1. Суммы могут быть любые в обоих курсорах. 2. не изветно сколько записей в курсорах 3. должны попасть все записи из курсора 1 и 2 (тоесть ни один курсор не является основным) при необходимости добавить основной (собирающий) курсор - можно его создать, там будет поле RN с перечислением всех возможных RN в первом и втором курсоров без дублей соответственно. блин срочно надо, горю ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 12:16 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
может попробовать такой метод? select c1.x, c2.y, c1.rn, c1.tip, textX, TextY; from c1; left join on c2 where c1.rn = c2.rn and c1.tip = c2.tip; into c3 select c1.x, c2.y, c2.rn, c2.tip, textX, TextY; from c2; left join on c1 where c2.rn = c1.rn and c2.tip = c1.tip; into c4 а потом что-то вроде select c3 append from c4 select DISTINCT * from c3 into Результат ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 12:35 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#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. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:08 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:22 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
DezhurДополняю: 1. Суммы могут быть любые в обоих курсорах. 2. не изветно сколько записей в курсорах 3. должны попасть все записи из курсора 1 и 2 (тоесть ни один курсор не является основным) при необходимости добавить основной (собирающий) курсор - можно его создать, там будет поле RN с перечислением всех возможных RN в первом и втором курсоров FULL JOIN надо Dezhurбез дублей соответственно. DISTINCT Как-то так: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:25 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dima T RN,TIP забыл Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:41 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
LUCIANDima T RN,TIP забыл Как забыл? Вот же они: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:51 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dima T LUCIANDima T RN,TIP забыл Как забыл? Вот же они: Действительно забыл. Тогда так: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:54 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dezhurможет попробовать такой метод? select c1.x, c2.y, c1.rn, c1.tip, textX, TextY; from c1; left join on c2 where c1.rn = c2.rn and c1.tip = c2.tip; into c3 select c1.x, c2.y, c2.rn, c2.tip, textX, TextY; from c2; left join on c1 where c2.rn = c1.rn and c2.tip = c1.tip; into c4 а потом что-то вроде select c3 append from c4 select DISTINCT * from c3 into Результат Этот вариант сработал LUCIANDima T RN,TIP забыл Код: plaintext 1. 2. 3.
И этот тоже. Но он конечно красивее. :-) p/s Tip - текстовое поле. Ура всем огромное спасибо за советы!!! приведенные к примеру таблицы имеют на десяток полей меньше, чем в реале. видимо сам из-за обилия информации, которую надо обработать совсем сооброжалки лишился, а может память просто обновить надо - книжек почитать :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 14:01 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dezhur LUCIANDima T RN,TIP забыл Код: plaintext 1. 2. 3.
И этот тоже. Но он конечно красивее. :-) Замени в списке полей C1.RN на NVL(C1.RN, C2.RN) as RN, т.к. при FULL JOIN может быть запись в C2 и отсутствовать в С1, в этом случае C1.RN будет NULL и надо брать C2.RN Для TIP точно также. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 14:12 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dima T Dezhur LUCIANDima T RN,TIP забыл Код: plaintext 1. 2. 3.
И этот тоже. Но он конечно красивее. :-) Замени в списке полей C1.RN на NVL(C1.RN, C2.RN) as RN, т.к. при FULL JOIN может быть запись в C2 и отсутствовать в С1, в этом случае C1.RN будет NULL и надо брать C2.RN Для TIP точно также. точно, сам только что напоролся на ошибку если в С1 нет а в С2 есть. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 14:36 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
не срабатывает. Если c1.TextX, c2.TextY одинаковые , то строчки сводит нормально, если разные, то дублируются. c1.TextX, c2.TextY - обязательно должны быть в сводной таблице - это ссылки на номера докуметов отражающих суммы по X и Y как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 12:15 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dezhurне срабатывает. Если c1.TextX, c2.TextY одинаковые , то строчки сводит нормально, если разные, то дублируются. c1.TextX, c2.TextY - обязательно должны быть в сводной таблице - это ссылки на номера докуметов отражающих суммы по X и Y как быть? Скрипт таблицы с исходными данными покажи на которых неправильно отрабатывает. Такого плана Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
И покажи что именно не устраивает в результате и как правильно должно быть ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 13:16 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Скрипты выложу, но может и сразу сможете ответить. как оказалось дело не в разных textX и textY. а втом, что группировка работает на записи в С1 и С2 которые есть либо и там и там, либо в одной из таблиц. а ситтуация когда например в с1 одна запись, а в С2 Две записи с таким же RN и Tip, но с разными суммами или Text. в итоге должно попать всё без использования sum(), grup by. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 13:50 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dezhurситтуация когда например в с1 одна запись, а в С2 Две записи с таким же RN и Tip, но с разными суммами или Text. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Получаем: xyrntiptextxtexty100110"r1"1"Текст строки1""Текст строки1"100310"r1"1"Текст строки1""Текст строки2" Что не так? Какой правильный результат должен быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:00 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Делаю Код: plaintext 1. 2. 3.
В итоге получаем X | Y | RN | Tip | TextX | TextY ------------------------------------------------------------------------ 100 | 110 | "r1" | "1" | "Текст строки1" | "Текст строки1a" 100 | 111 |"r1" | "1" | "Текст строки1"| "Текст строки1b" 200 | null | "r1" | "2 " | "Текст строки2"| null 300 | 310 | "r2" | "1" | "Текст строки3" | "Текст строки2a" 400 | 410 | "r2" | "2" | "Текст строки4" | "Текст строки"3a" _______________________________________________________________ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:04 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dezhur[src] В итоге получаем X | Y | RN | Tip | TextX | TextY ------------------------------------------------------------------------ 100 | 110 | "r1" | "1" | "Текст строки1" | "Текст строки1a" 100 | 111 |"r1" | "1" | "Текст строки1"| "Текст строки1b" 200 | null | "r1" | "2 " | "Текст строки2"| null 300 | 310 | "r2" | "1" | "Текст строки3" | "Текст строки2a" 400 | 410 | "r2" | "2" | "Текст строки4" | "Текст строки"3a" _______________________________________________________________ Выделенное красным должно быть NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:06 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dima T xyrntiptextxtexty100110"r1"1"Текст строки1""Текст строки1"100310"r1"1"Текст строки1""Текст строки2" Что не так? Какой правильный результат должен быть? т.к. документ с суммой 100 по Х уже попал в таблицу, снова он попадать не должен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:11 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
DezhurВыделенное красным должно быть NULL SELECT такое не сделает. Это тюнинговать кодом надо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
А что делать будешь с таким набором: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:21 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
поидее можно можно пробежаться по полученной С3 и отсканировать повторения по |Сумма (X или Y) + RN + Tip + Text (X или Y)| и замениь на NULL повторные значения. вот только не могу сообразить как. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:26 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dezhurпоидее можно можно пробежаться по полученной С3 и отсканировать повторения по |Сумма (X или Y) + RN + Tip + Text (X или Y)| и замениь на NULL повторные значения. вот только не могу сообразить как. Читай внимательно. Я тебе уже показал как: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:30 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dima T А что делать будешь с таким набором: Код: plaintext 1. 2. 3. 4. 5. 6.
Должно получиться xyrntiptextxtexty100110"r1"1"Текст строки1_1""Текст строки1a"101111"r1"1"Текст строки1_2""Текст строки1b" ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:32 |
|
Снова объединение курсоров
|
|||
---|---|---|---|
#18+
Dima T Dezhurпоидее можно можно пробежаться по полученной С3 и отсканировать повторения по |Сумма (X или Y) + RN + Tip + Text (X или Y)| и замениь на NULL повторные значения. вот только не могу сообразить как. Читай внимательно. Я тебе уже показал как: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
это мы просто одновременно начали писать ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 14:34 |
|
|
start [/forum/topic.php?fid=41&msg=35485383&tid=1587385]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 183ms |
0 / 0 |