powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова объединение курсоров
27 сообщений из 27, показаны все 2 страниц
Снова объединение курсоров
    #35484228
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
есть два сформированных курсора.

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" | "Текст строки" | "Текст строки"


Подскажите пожалуйста как можно провернуть такую штуку?
Заранее спасибо.
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35484383
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
bla-bla-bla FROM cursor1 c1 
LEFT JOIN cursor2 c2
ON LEFT(c1.x, 1 )=LEFT(c2.y, 1 )
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35484893
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дополняю:

1. Суммы могут быть любые в обоих курсорах.
2. не изветно сколько записей в курсорах
3. должны попасть все записи из курсора 1 и 2 (тоесть ни один курсор не является основным)
при необходимости добавить основной (собирающий) курсор - можно его создать, там будет поле RN с перечислением всех возможных RN в первом и втором курсоров без дублей соответственно.

блин срочно надо, горю
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35484948
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 Результат
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485071
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой код устроит:
Код: 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.
*!*	Здравствуйте.
*!*	есть два сформированных курсора.

*!*	1й курсор (пример данных)
SELECT  1 
CREATE CURSOR C1 (X N( 3 ),RN C( 2 ),Tip N( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 100  , "r1" ,  1  , "Текст строки1")
INSERT INTO C1 VALUES ( 200  , "r1" ,  2  , "Текст строки2")
INSERT INTO C1 VALUES ( 300  , "r2" ,  1  , "Текст строки3")
INSERT INTO C1 VALUES ( 400  , "r2" ,  2  , "Текст строки4")

*2й курсор (пример данных)
SELECT  2 
CREATE CURSOR C2 (Y N( 3 ), RN C( 2 ) , Tip N( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 110  , "r1" ,  1  , "Текст строки1")
INSERT INTO C2 VALUES ( 310  , "r2" ,  1  , "Текст строки2")
INSERT INTO C2 VALUES ( 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" , "Текст строки" , "Текст строки"

SELECT C1.X,C2.Y,C1.RN,C1.TIP,C1.TEXTX,C2.TEXTY FROM C1,C2 WHERE C1.RN=C2.RN AND C1.TIP=C2.TIP ;
 UNION ALL ;
SELECT C1.X, 000 ,C1.RN,C1.TIP,C1.TEXTX,SPACE( 20 ) FROM C1 WHERE NOT EXISTS (SELECT * FROM  C2 WHERE C1.RN=C2.RN AND C1.TIP=C2.TIP) ;
 UNION ALL ;
SELECT  000 ,C2.Y,C2.RN,C2.TIP,SPACE( 20 ),C2.TEXTY FROM C2 WHERE NOT EXISTS (SELECT * FROM  C1 WHERE C1.RN=C2.RN AND C1.TIP=C2.TIP)
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485127
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
bla-bla-bla FROM cursor1 c1 
FULL OUTER JOIN cursor2 c2
ON c1.rn=c2.rn
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485149
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DezhurДополняю:

1. Суммы могут быть любые в обоих курсорах.
2. не изветно сколько записей в курсорах
3. должны попасть все записи из курсора 1 и 2 (тоесть ни один курсор не является основным)
при необходимости добавить основной (собирающий) курсор - можно его создать, там будет поле RN с перечислением всех возможных RN в первом и втором курсоров

FULL JOIN надо

Dezhurбез дублей соответственно.
DISTINCT

Как-то так:
Код: plaintext
1.
2.
select distinct c1.x, c2.y, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485198
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T RN,TIP забыл

Код: plaintext
1.
2.
3.
select distinct c1.x, c2.y,C1.RN,C1.TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485242
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LUCIANDima T RN,TIP забыл
Как забыл? Вот же они:
Код: plaintext
1.
2.
3.
4.
select distinct c1.x, c2.y,C1.RN,C1.TIP, c1.TextX, c2.TextY;
	from c1 full join c2;
             on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485251
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T LUCIANDima T RN,TIP забыл
Как забыл? Вот же они:

Действительно забыл. Тогда так:
Код: plaintext
1.
2.
3.
select distinct c1.x, c2.y, NVL(C1.RN, C2.RN) as RN, NVL(C1.TIP, c2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485278
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
select distinct c1.x, c2.y,C1.RN,C1.TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 

И этот тоже. Но он конечно красивее. :-)

p/s Tip - текстовое поле.

Ура всем огромное спасибо за советы!!!
приведенные к примеру таблицы имеют на десяток полей меньше, чем в реале.
видимо сам из-за обилия информации, которую надо обработать совсем сооброжалки лишился,
а может память просто обновить надо - книжек почитать :-)
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485305
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dezhur
LUCIANDima T RN,TIP забыл

Код: plaintext
1.
2.
3.
select distinct c1.x, c2.y,C1.RN,C1.TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 

И этот тоже. Но он конечно красивее. :-)
Замени в списке полей C1.RN на NVL(C1.RN, C2.RN) as RN, т.к. при FULL JOIN может быть запись в C2 и отсутствовать в С1, в этом случае C1.RN будет NULL и надо брать C2.RN
Для TIP точно также.
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35485383
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Dezhur
LUCIANDima T RN,TIP забыл

Код: plaintext
1.
2.
3.
select distinct c1.x, c2.y,C1.RN,C1.TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 

И этот тоже. Но он конечно красивее. :-)
Замени в списке полей C1.RN на NVL(C1.RN, C2.RN) as RN, т.к. при FULL JOIN может быть запись в C2 и отсутствовать в С1, в этом случае C1.RN будет NULL и надо брать C2.RN
Для TIP точно также.

точно, сам только что напоролся на ошибку если в С1 нет а в С2 есть.
Спасибо.
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487097
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не срабатывает.
Если
c1.TextX, c2.TextY одинаковые , то строчки сводит нормально,
если разные, то дублируются.
c1.TextX, c2.TextY - обязательно должны быть в сводной таблице - это ссылки на номера докуметов отражающих суммы по X и Y
как быть?
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487401
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dezhurне срабатывает.
Если
c1.TextX, c2.TextY одинаковые , то строчки сводит нормально,
если разные, то дублируются.
c1.TextX, c2.TextY - обязательно должны быть в сводной таблице - это ссылки на номера докуметов отражающих суммы по X и Y
как быть?

Скрипт таблицы с исходными данными покажи на которых неправильно отрабатывает. Такого плана
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE CURSOR C1 (X N( 3 ),RN C( 2 ),Tip N( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 100  , "r1" ,  1  , "Текст строки1")
INSERT INTO C1 VALUES ( 200  , "r1" ,  2  , "Текст строки2")
INSERT INTO C1 VALUES ( 300  , "r2" ,  1  , "Текст строки3")
INSERT INTO C1 VALUES ( 400  , "r2" ,  2  , "Текст строки4")

CREATE CURSOR C2 (Y N( 3 ), RN C( 2 ) , Tip N( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 110  , "r1" ,  1  , "Текст строки1")
INSERT INTO C2 VALUES ( 310  , "r2" ,  1  , "Текст строки2")
INSERT INTO C2 VALUES ( 410  , "r2" ,  2  ,"Текст строки3")

И покажи что именно не устраивает в результате и как правильно должно быть
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487516
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скрипты выложу, но может и сразу сможете ответить.
как оказалось дело не в разных textX и textY. а втом, что
группировка работает на записи в С1 и С2 которые есть либо и там и там,
либо в одной из таблиц.
а ситтуация когда например в с1 одна запись, а в С2 Две записи с таким же RN и Tip, но с разными суммами или Text.
в итоге должно попать всё без использования sum(), grup by.
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487554
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dezhurситтуация когда например в с1 одна запись, а в С2 Две записи с таким же RN и Tip, но с разными суммами или Text.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE CURSOR C1 (X N( 3 ),RN C( 2 ),Tip N( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 100  , "r1" ,  1  , "Текст строки1")

CREATE CURSOR C2 (Y N( 3 ), RN C( 2 ) , Tip N( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 110  , "r1" ,  1  , "Текст строки1")
INSERT INTO C2 VALUES ( 310  , "r1" ,  1  , "Текст строки2")

select distinct c1.x, c2.y, NVL(C1.RN, C2.RN) as RN, NVL(C1.TIP, c2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 

Получаем:
xyrntiptextxtexty100110"r1"1"Текст строки1""Текст строки1"100310"r1"1"Текст строки1""Текст строки2"

Что не так? Какой правильный результат должен быть?
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487576
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE CURSOR C1 (X N( 3 ),RN C( 2 ),Tip N( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 100  , "r1" , "1" , "Текст строки1")
INSERT INTO C1 VALUES ( 200  , "r1" , "2" , "Текст строки2")
INSERT INTO C1 VALUES ( 300  , "r2" , "1" , "Текст строки3")
INSERT INTO C1 VALUES ( 400  , "r2" , "2" , "Текст строки4")

CREATE CURSOR C2 (Y N( 3 ), RN C( 2 ) , Tip N( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 110  , "r1" , "1" , "Текст строки1a")
INSERT INTO C2 VALUES ( 111  , "r1" , "1" , "Текст строки1b")
INSERT INTO C2 VALUES ( 310  , "r2" , "1" , "Текст строки2a")
INSERT INTO C2 VALUES ( 410  , "r2" , "2" ,"Текст строки3a")

Делаю
Код: plaintext
1.
2.
3.
select distinct c1.x, c2.y, nvl(C1.RN, C2.RN) as RN, nvl(C1.TIP,C2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by RN, TIP


В итоге получаем

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"
_______________________________________________________________
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487582
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487600
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
xyrntiptextxtexty100110"r1"1"Текст строки1""Текст строки1"100310"r1"1"Текст строки1""Текст строки2"

Что не так? Какой правильный результат должен быть?
т.к. документ с суммой 100 по Х уже попал в таблицу, снова он попадать не должен.
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487620
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DezhurВыделенное красным должно быть NULL
SELECT такое не сделает. Это тюнинговать кодом надо:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select distinct c1.x, c2.y, NVL(C1.RN, C2.RN) as RN, NVL(C1.TIP, c2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 ;
	into cursor tres readwrite

lnPrevX = - 1 
scan
	if lnPrevX = tres.x
		repl in tres X with NULL, TextX with NULL
	else
		lnPrevX = tres.x
	endif
endscan
brow

А что делать будешь с таким набором:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE CURSOR C1 (X N( 3 ),RN C( 2 ),Tip C( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 100  , "r1" , "1" , "Текст строки1_1")
INSERT INTO C1 VALUES  ( 101  , "r1" , "1" , "Текст строки1_2")

CREATE CURSOR C2 (Y N( 3 ), RN C( 2 ) , Tip C( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 110  , "r1" , "1" , "Текст строки1a")
INSERT INTO C2 VALUES ( 111  , "r1" , "1" , "Текст строки1b")
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487634
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поидее можно можно пробежаться по полученной С3
и отсканировать повторения по |Сумма (X или Y) + RN + Tip + Text (X или Y)| и замениь на NULL повторные значения.
вот только не могу сообразить как.
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487645
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.
select distinct c1.x, c2.y, NVL(C1.RN, C2.RN) as RN, NVL(C1.TIP, c2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 ;
	into cursor tres readwrite

lnPrevX = - 1 
scan
	if lnPrevX = tres.x
		repl in tres X with NULL, TextX with NULL
	else
		lnPrevX = tres.x
	endif
endscan
brow
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487654
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
А что делать будешь с таким набором:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE CURSOR C1 (X N( 3 ),RN C( 2 ),Tip C( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 100  , "r1" , "1" , "Текст строки1_1")
INSERT INTO C1 VALUES  ( 101  , "r1" , "1" , "Текст строки1_2")

CREATE CURSOR C2 (Y N( 3 ), RN C( 2 ) , Tip C( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 110  , "r1" , "1" , "Текст строки1a")
INSERT INTO C2 VALUES ( 111  , "r1" , "1" , "Текст строки1b")


Должно получиться
xyrntiptextxtexty100110"r1"1"Текст строки1_1""Текст строки1a"101111"r1"1"Текст строки1_2""Текст строки1b"
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487659
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
select distinct c1.x, c2.y, NVL(C1.RN, C2.RN) as RN, NVL(C1.TIP, c2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP;
	order by  1 ;
	into cursor tres readwrite

lnPrevX = - 1 
scan
	if lnPrevX = tres.x
		repl in tres X with NULL, TextX with NULL
	else
		lnPrevX = tres.x
	endif
endscan
brow

это мы просто одновременно начали писать
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35487796
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DezhurДолжно получиться
xyrntiptextxtexty100110"r1"1"Текст строки1_1""Текст строки1a"101111"r1"1"Текст строки1_2""Текст строки1b"

Проблемы твои в том что у тебя нет уникального ключа, для полного счастья тебе надо добавить в исходные данные еще одно поле RecNum в котором пронумировать предварительно записи с одинаковыми (RN,TYP)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE CURSOR C1 (RECNOM i, X N( 3 ),RN C( 2 ),Tip C( 1 ),TextX C( 20 ) )
INSERT INTO C1 VALUES  ( 1 ,  100  , "r1" , "1" , "Текст строки1_1")
INSERT INTO C1 VALUES  ( 2 ,  101  , "r1" , "1" , "Текст строки1_2")
INSERT INTO C1 VALUES  ( 1 ,  200  , "r2" , "1" , "Текст строки2")

CREATE CURSOR C2 (RECNOM i, Y N( 3 ), RN C( 2 ) , Tip C( 1 ) , TextY C( 20 ))
INSERT INTO C2 VALUES ( 1 ,  110  , "r1" , "1" , "Текст строки1a")
INSERT INTO C2 VALUES ( 2 ,  111  , "r1" , "1" , "Текст строки1b")
INSERT INTO C2 VALUES ( 1 ,  210  , "r2" , "1" , "Текст строки2a")
INSERT INTO C2 VALUES ( 2 ,  211  , "r2" , "1" , "Текст строки2b")

select distinct c1.x, c2.y, NVL(C1.RN, C2.RN) as RN, NVL(C1.TIP, c2.TIP) as TIP, c1.TextX, c2.TextY;
	from c1 full join c2 on C1.RN=C2.RN AND C1.TIP=C2.TIP and C1.RECNOM = C2.RECNOM;
	order by  1 

Будет:
xyrntiptextxtextyNULL211"r2""1"NULL"Текст строки2b"100110"r1""1""Текст строки1_1""Текст строки1a"101111"r1""1""Текст строки1_2""Текст строки1b"200210"r2""1""Текст строки2""Текст строки2a"
...
Рейтинг: 0 / 0
Снова объединение курсоров
    #35488063
Dezhur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YES!

Все оказалось не так сложно как казалось вначале,
главное сразу определить все требования к необходимому результату.

Огромное спасибо!
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова объединение курсоров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]