Query Select Particolare

mercoledì 24 febbraio 2010 - 17.30

Furetto80 Profilo | Newbie

Ciao ho una tabella su MSSql 2005 express con ID e 4 campi Classe1, classe2, classe3, classe4.
Li riempio con la frutta:

1 | PERA | MELA | PESCA | BANANA
2 | PERA | BANANA | PESCA | PESCA
3 | MELA | MELA | BANANA | BANANA
4 | MELA | PERA | BANANA | PESCA
5 | PERA | PERA | PERA | PERA

e cosi via, tutte le combinazioni possibili... con ripetizioni e inversioni.

Nella pagina web che ci si appoggia, l'utente ha 4 caselline di ricerca.
Ognuna con una tendina visualizza i 4 frutti.


L'utente a questo punto selezionando la prima tendina mette il primo frutto e preme CERCA.
Devono uscire tutti i casi in cui il frutto scelto compare ALMENO 1 volta : nella prima o seconda colonna.
Frutto1 | xxxxxx | xxxxx | xxxxx
xxxxxx | Frutto1 | xxxxx | xxxxx


L'utente sceglie un frutto selezionado le prime 2 caselline.
Devono uscire tutte le righe di DB nel quale l'accoppiata frutto1 e frutto2 siano nelle prime 2 colonne.
Quindi devono saltar fuori:

Frutto1 | Frutto2 | xxxxx | xxxxx
Frutto2 | Frutto1 | xxxxx | xxxxx

L'utente a questo punto sceglie anche il terzo frutto dalla terza casella:

Quindi devono saltar fuori: Frutto1 | Frutto2 | Frutto3 | xxxxx
Frutto1 | Frutto2 | xxxxxx | Frutto3
Frutto2 | Frutto1 |xxxxx | Frutto3
Frutto2 | Frutto1 | Frutto3 | xxxxx

L'utente a questo punto sceglie anche il terzo frutto dalla terza casella:

Non sto a fare le combinazioni ma in questo caso deve uscire le righe nel quale i 4 frutti sono tutti e 4 presenti univocamente all'interno della tabella.

So che è una bella rogna, il fatto è spero in 3 cose:

-O qualcuno ha già affrontato il problema e sà come risolverlo
-O un santo, più intelligente di me, passa di quà e crea una query di dio
-O mi arrendo :-)



carloalberto Profilo | Junior Member

... non sono un santo ... :-)
affronterei il problema 'scomponendolo' , cio creando delle viste semplici ...piuttosto che una query complesa
... piu tardi se non arriva la soluzione ci provo :-)

Tirechan Profilo | Newbie

Ma non basta fare una query di questo tipo:

Select *
From (
Select *
From (
Select *
From (
Select *
From Tabella
Where Classe1 = 'Frutto1' or Classe2 = 'Frutto1'
) T2
Where Classe1 = 'Frutto2' or Classe2 = 'Frutto2'
) T3
Where Classe3 = 'Frutto3' or Classe4 = 'Frutto3'
) T4
Where Classe3 = 'Frutto4' or Classe4 = 'Frutto4'

o mi sfugge qualcosa?

Ciao
Davide

Furetto80 Profilo | Newbie

Ciao, ho provato il tuo metodo nella situazione in cui i frutti sono 3.

DECLARE @C1 AS varchar(20)
DECLARE @C2 AS varchar(20)
DECLARE @C3 AS varchar(20)

SET @C1='Mela'
SET @C2='Pera'
SET @C3='Banana'


Select * From (
Select * From (
Select * From (
Select * From (
Select * From (
Select * From Strategie3v3
Where Classe1 = @C1 or Classe2 = @C2 or Classe3 = @C3 ) T1
Where Classe1 = @C2 or Classe2 = @C3 or Classe3 = @C1 ) T2
Where Classe1 = @C3 or Classe2 = @C1 or Classe3 = @C2 ) T3
Where Classe1 = @C1 or Classe2 = @C3 or Classe3 = @C2 ) T4
Where Classe1 = @C2 or Classe2 = @C1 or Classe3 = @C3 ) T5
Where Classe1 = @C3 or Classe2 = @C2 or Classe3 = @C1

Ma non riesco a farla andare...
Mi sai aiutare? :-(

Furetto80 Profilo | Newbie

Fixato cosi..

Select * From Strategie3v3
Where
(Classe1 = @C1 AND Classe2 = @C2 AND Classe3 = @C3) or
(Classe1 = @C2 AND Classe2 = @C3 AND Classe3 = @C1) or
(Classe1 = @C3 AND Classe2 = @C1 AND Classe3 = @C2) or
(Classe1 = @C1 AND Classe2 = @C3 AND Classe3 = @C2) or
(Classe1 = @C2 AND Classe2 = @C1 AND Classe3 = @C3) or
(Classe1 = @C3 AND Classe2 = @C2 AND Classe3 = @C1)

Non è sto gran che ma funziona..
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5