現時点では、一般的なデータベースは使用できないため、一時的にExcelを使用しています。何か案は?
の
ここには、dim1(ABC)、dim2(123)、dim3(XYZ)の3つの次元があります。
これは、VBAを使用せずに標準のExcelを使用して2次元のデカルト積を作成する方法です。
1)dim1を垂直に、dim2を水平にプロットします。交差のディメンションメンバーを連結します。
2)データのピボット解除。 ALT-D-Pを使用してピボットテーブルウィザードを起動します(Altを押さないで、1回押します)。 「複数の統合範囲」を選択します->単一のページを作成します。->すべてのセル(ヘッダーを含む!)を選択してリストに追加し、[次へ]を押します。
3)結果の値を垂直にプロットし、連結された文字列を分解します
ほら、クロスジョインです。別の次元を追加する必要がある場合は、このアルゴリズムをもう一度繰り返します。
乾杯、
コンスタンティン。
この記事は、Excelでクロス結合を実行するのに役立ちました。
http://www.excelguru.ca/blog/2016/05/11/cartesian-product-joins-for-the-Excel-person/
ExcelのMicrosoft Power QueryにMicrosoft Addが必要 https://www.Microsoft.com/en-us/download/details.aspx?id=39379
ピボットテーブルを使用して、任意の数のリストのデカルト積を生成する非常に簡単な方法を次に示します。
https://chandoo.org/wp/generate-all-combinations-from-two-lists-Excel/
この例は2つのリストの場合ですが、任意の数のテーブルや列で機能します。
ピボットテーブルを作成する前に、 値リストをテーブルに変換 する必要があります。
VBAを使用すると、次のことができます。ここに小さな例があります:
Sub SqlSelectExample()
'list elements in col C not present in col B
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
con.Open "Driver={Microsoft Excel Driver (*.xls)};" & _
"DriverId=790;" & _
"Dbq=" & ThisWorkbook.FullName & ";" & _
"DefaultDir=" & ThisWorkbook.FullName & ";ReadOnly=False;"
Set rs = New ADODB.Recordset
rs.Open "select ccc.test3 from [Sheet1$] ccc left join [Sheet1$] bbb on ccc.test3 = bbb.test2 where bbb.test2 is null ", _
con, adOpenStatic, adLockOptimistic
Range("g10").CopyFromRecordset rs '-> returns values without match
rs.MoveLast
Debug.Print rs.RecordCount 'get the # records
rs.Close
Set rs = Nothing
Set con = Nothing
End Sub