2014-11-18 417 views

risposta

-3

Provare a utilizzare un CROSS JOIN. Per saperne di più: MSDN

È possibile utilizzare l'espressione CROSSJOIN(table1, table2) per creare un prodotto cartesiano.

+0

la domanda è su Excel. – liang

0

Utilizzando VBA, è possibile. Ecco un piccolo esempio:

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 
1

Hai 3 dimensioni qui: Dim1 (ABC), Dim2 (123), DIM3 (XYZ).

Ecco come si fa un prodotto cartesiano di 2 dimensioni che utilizzano standard di Excel e non VBA:

1) Tracciare DIM1 in verticale e in orizzontale Dim2. membri della dimensione concatenare sulle intersezioni:

Step 1 - plotting dimensions

2) di dati Unpivoting. Avvia la procedura guidata della tabella pivot usando ALT-D-P (non tenere premuto ALT, premilo una volta). Seleziona "Intervalli di consolidamento multipli" -> crea una singola pagina .. -> Seleziona tutte le celle (comprese le intestazioni!) E aggiungila all'elenco, premi avanti.

step2 - unpivoting data

3) tracciare i risultanti valori verticale e smontare le stringhe concatenate

step 3 - disassemble strings

Voilà, hai il cross join. Se hai bisogno di un'altra dimensione aggiunta, ripeti questo algoritmo.

Cheers,

Costantino.