여러 테이블의 데이터 결합두 테이블 (또는 그 이상)의 데이터를 결합하여 새 마스터 테이블을 만들려고합니다. 예를 들어 아래의 표 A와 표 B를 표 AB로 결합하려고합니다.



기본적으로 테이블 A와 B는 "시작"및 "끝"에 비슷한 열이 있지만 각 행에 대한 범위가 다릅니다. 내가하려는 것은 두 테이블에서 시작 거리 1에서 20까지의 세그먼트를 결합하여 테이블 AB로 결합하는 것입니다.
스크립팅이나 테이블 함수를 통해이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
데이터 테이블스크립팅Re : 여러 테이블의 데이터 결합이것은 스크립팅으로 어떻게 할 수 있는지 아이디어를 줄 수 있습니다.
Names Default To Here(1);
dt1 = New Table("Table A",
Add Rows(4),
Compress File When Saved(1),
New Column("Start",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 5, 10, 15])
),
New Column("End",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([5, 10, 15, 20])
),
New Column("Name", Character, "Nominal", Set Values({"A", "B", "C", "D"}))
);
dt2 = New Table("Table B",
Add Rows(5),
Compress File When Saved(1),
New Column("Start",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 4, 8, 12, 16])
),
New Column("End",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([4, 8, 12, 16, 20])
),
New Column("Name",
Character,
"Nominal",
Set Values({"X1", "X2", "X3", "X4", "X5"})
)
);
//create collection table
dt_final = New Table("Table A-B",
Compress File When Saved(1),
New Column("Start", Numeric, "Continuous", Format("Best", 12)),
New Column("End", Numeric, "Continuous", Format("Best", 12)),
New Column("Name", Character, "Nominal")
);
For Each Row(dt1,
startVal = Column(dt1, "Start")[Row()];
endVal = Column(dt1, "End")[Row()];
nameVal = Column(dt1, "Name")[Row()];
r_dt2 = dt2 << get rows where(startVal <= :Start <= endVal | startVal <= :End <= endVal);
For(i = 1, i <= N Items(r_dt2), i++,
newEnd = Min(Column(dt2, "End")[r_dt2[i]], endVal);
newName = nameVal || " " ||Column(dt2, "Name")[r_dt2[i]];
newRow = EvalList({startVal, newEnd, newName});
dt_final << Add rows({Start = newRow[1], End = newRow[2], Name = newRow[3]});
startVal = newEnd;
endVal= Max(Column(dt2, "End")[r_dt2[i]], endVal);
);
);
Close(dt1, no save);
Close(dt2, no save);Re : 여러 테이블의 데이터 결합Loc Sorted ()를 사용하여 JSL의 테이블 조회 버전으로이 문제를 해결할 수도 있습니다.
건배,
브래디
Names Default To Here( 1 );
dt1 = New Table( "Table A",
Add Rows( 4 ),
Compress File When Saved( 1 ),
New Column( "Start", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 5, 10, 15] ) ),
New Column( "End", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 10, 15, 20] ) ),
New Column( "Name", Character, "Nominal", Set Values( {"A", "B", "C", "D"} ) )
);
dt2 = New Table( "Table B",
Add Rows( 5 ),
Compress File When Saved( 1 ),
New Column( "Start", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 4, 8, 12, 16] ) ),
New Column( "End", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 8, 12, 16, 20] ) ),
New Column( "Name", Character, "Nominal", Set Values( {"X1", "X2", "X3", "X4", "X5"} ) )
);
//////////// Begin processing here...
ends = Matrix( Associative Array( Concat( As List( dt1:End << get values ), As List( dt2:End << get values ) ) ) << get keys );
starts = [1] |/ ends[1 :: (N Row( ends ) - 1)];
dt3 = As Table( starts || ends, <<COLUMN names=""></COLUMN>Re : 여러 테이블의 데이터 결합@jthi & 헉헉 응답 해 주셔서 감사합니다. 솔루션이 제대로 작동한다고 확신하지만 먼저 소화하고 싶습니다. 제 의도를 충족하면 여기에서 다시 응답하겠습니다. 도움을 주셔서 감사합니다! 계속 게시하십시오.
Re : 여러 테이블의 데이터 결합약간의 생각 끝에 나는 이것을 대화식으로 할 수있는 방법을 찾았다. 설명하기보다는 그 과정을 설명하는 짧은 동영상을 첨부했습니다. 대화식 접근 방식은 결합하려는 테이블 수에 관계없이 동일한 작업량 (많지 않음)이라는 장점이 있습니다. 내 예에서는 3을 사용합니다. 단점은 직관적이지 않은 정렬이 필요하다는 것입니다. 정렬에 오류가 있으면 잘못된 결과를 얻게됩니다.
이 스크립트를 실행하여 예제에서 사용하는 테이블을 생성하십시오.
Names Default To Here(1);
dta = new table("A",
<<ADDROWS></ADDROWS>