| 
 Veteran
 
 Beiträge: 229
 
    Ort: Badendorf
 | Hallo, das ist ja ein nettes Angebot ich habe es rekursiv mit sqlite gemacht
 gesucht sind alle erlaubten Kombinationen
 Mein Beispiel habe ich auf 3 Inputkanäle begrenzt (es könnten aber auch 20 sein)
 alle 3 Inputs sind in der CTE "allowed" aufgelistet zusammen mit den erlaubten Outputs
 "alternatives" ist die sich ergebende Ergebnistabelle, die ich anschließend mit dem select filtere.
 Ich habe es inzwischen etwas anders als vorher dargestellt: jede Zeile ist eine mögliche Lösung
 die Striche und Pfeile dienen nur der Lesbarkeit, müssen also nicht sein
 
 Hier der Output/ die 3 Lösungen, die sich ergeben und so ausgegeben werden:
 
 Lösung
 ------------------------------------------------------
 Input1 => b1 || Input2 => b3 || Input3 => b4 ||
 Input1 => b2 || Input2 => b3 || Input3 => b4 ||
 Input1 => b2 || Input2 => b1 || Input3 => b4 ||
 
 erlaubte Lösungen sind also b1,b3,b4 oder b2,b3,b4 oder b2,b1,b4
 hier der Code, der das o.a. Ergebnis erzeugt
 Ich drücke die Daumen, dass Du eine Lösung mit msaccess hinbekommst.
 und hoffe, dass ich nur ein Brett vor dem Kopf habe
 Ich bin sehr gespannt
 
 viele Grüße, Rudolf
 
 --------------------------------------------------------------------
 with recursive
 allowed(Input,erlaubt) as
 (
 values('Input1','b1')
 union all values('Input1','b2')
 union all values('Input2','b3')
 union all values('Input2','b1')
 union all values('Input3','b4')
 ),
 alternatives (nr,Lösung) as
 (
 select 1, Input || ' => ' ||erlaubt || ' || '
 from allowed
 where  Input in
 (select distinct Input from allowed limit 1)	/*Startzeile*/
 union ALL
 select  nr+1, Lösung || Input || ' => ' ||erlaubt || ' || '  as q
 from allowed,alternatives	               /*Rekursivzeile*/
 where  Input in
 (select distinct Input from allowed
 where instr(Lösung,Input)=0
 limit 1)
 and instr(Lösung,erlaubt)=0	/*keine doppelten Erlaubten => nicht schon in Lösung enthalten*/
 and q not null	              /*Endkriterium, Input wird NULL nach dem letzten Input*/
 )
 select Lösung from alternatives where nr in (select max(nr) from alternatives) /*nur komplette Lösungen anzeigen*/
 
 Edited by Greiff 04.07.21  16:26
 
 |