Hver variant indeholder alså 3 optioner (og altid 3) 10ere, 30ere og 50ere komm
er fra hver sin type af optioner. Hvis jeg derfor gerne vil tilføje en kombination der indeholder 53, skal jeg tilføje rækkerne
7 - 11 - 103 8 - 31 - 103 9 - 53 - 103
Dette er simpelt nok i dette tilfælde, men noget mere kompliceret når/hvis der også ligger rækker/kombinationer med 22,23,24,32,33 osv osv
Jeg har 2 tilgangsvinkler til dette.
1) Beregn alle kombinationer Dette vil så vidt jeg kan se kræve at der loopes inde i loop ala for x = 11 to 15 for y = 31 to 33 osv... Dette virker delt ikke særlig hensigtmæssigt, og giver nogle problemer med at lave et script som kan håndtere et ubegrænset antal optionstyper
2) Generer nye entries ud fra eksisterende kombinationer Hvis man sammenligner ovenstående tabeldata eksempler, kunne man måske forestille sig en select, som ikke returnerede duplicate sæt af data. Fx i første data eksmpel at selecte alle entries som ikke tilhøre samme options type (altså ingen entries i 50erne) men heller ikke de duplicate sæt som derved fremkommer.
Ville det ikke være smartere at have hver sin kolonne til hver sin optionstype, når der nu altid er et tal for hver optionstype? Dette ville elimere din problemstilling.
Ellers bliver du nød til at lave en query som først deler rækkerne op i kolonner, og derefter udføre logikken. Dette vil blive en tung query når der kommer manger rækker i tabellen.
Det er desværre ikke en mulighed da metoden skal virke med et ubegrænset antal optionstyper (11,31,51,71,91)
Jeg har dog fundet en løsninger som kan bruges ved netop 3 optionstyper, i tilfælde af at andre skulle stå med samme problem
-- generate test data -- select * into #t1 from (select 1 , 11 , '111' union all select 2 , 11 , '121' union all select 3 , 11 , '131' union all select 4 , 12 , '111' union all select 5 , 12 , '121' union all select 6 , 12 , '132' union all select 7 , 13 , '111' union all select 8 , 13 , '121' union all select 9 , 13 , '133' union all select 10 , 14 , '111' union all select 11 , 14 , '122' union all select 12 , 14 , '131' union all select 13 , 15 , '111' union all select 14 , 15 , '122' union all select 15 , 15 , '132' union all select 16 , 16 , '112' union all select 17 , 16 , '121' union all select 18 , 16 , '133' )f(x,y,z)
-- select the groups select a.* from #t1 a join ( select min(y)'y' from ( select y, min(z)'miz', max(z)'maz' from #t1 where z not like '13%' group by y )f group by miz, maz )b on a.y=b.y where z not like '13%'
-- cleanup drop table #t1
Jeg er endt med en løsning der understøtter ubegrænset antal option, men som benytter en het anden fremgangsmåde. Denne er slet ikke er i stil med ovenstående, og jeg vil derfor udelade løsningen her. Hvis nogle skulle ende med samme problem med flere varianttyper, så grib endelig fat i mig
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.