複数のテーブルのデータを組み合わせる2つ(またはそれ以上)のデータを組み合わせて、新しいマスターテーブルを作成しようとしています。 例として、結果として、以下の表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 & @brady_brady回答ありがとうございます。 提供されたソリューションは機能すると確信していますが、最初にそれらを消化したいと思います。それらが私の意図を満たしている場合は、ここに返信します。 助けに感謝します! 投稿してください。
Re:複数のテーブルのデータを組み合わせる少し考えた後、これをインタラクティブに行う方法を見つけました。 説明するのではなく、プロセスについて説明する短いビデオを添付しました。 インタラクティブなアプローチには、組み合わせるテーブルの数に関係なく、同じ量の作業(それほど多くはない)であるという利点があります。 私の例では、3を使用します。 欠点は、直感的でない並べ替えが必要になることです。並べ替えを間違えると、間違った結果が得られます。
このスクリプトを実行して、例で使用するテーブルを生成します。
Names Default To Here(1);
dta = new table("A",
<<ADDROWS></ADDROWS>