Newsgroup: it.comp.appl.access
Titolo: Problema ordinamento records

ho una tabella con tre campi (sconto1, sconto2, sconto3) ciascuno contenente
valori diversi:
sconto1: 10%, 5%, 20%
sconto2: 20%, 10%, 5%
sconto3: 2%, 3%, 5%
se uso una query tipo "order by sconto1 DESC, sconto2 DESC, sconto3 DESC" mi
ordina ovviamente solo i dati del campo "sconto1", e solo a parità di valori
utilizza gli altri criteri di ordinamento. Come faccio invece ad ordinare i
dati indipendentemente dal campo nel quale sono stati inseriti ? Vorrei
insomma ottenere un ordinamento tipo:
2%    sconto2
3%    sconto3
5%    sconto2
5%    sconto3
10%  sconto1
10%  sconto2
20%  sconto1
... e così via.
E' possibile con ASP ed Access ?
Grazie.



con access la prima soluzione che mi viene in mente è di creare una
tabella in cui memorizzare via codice i valori che ti servono e poi
ordinarla!
Saluti.
Emanuele.

 wrote in message
news:a0ugj8$mmvbc$1...@ID-83001.news.dfncis.de...

Crea (in Access) una query di tipo Union contenente il seguente codice (o
similare):
SELECT sconti.Descrizione AS descr, sconti.sconto1 AS sconto FROM sconti
UNION ALL SELECT sconti.Descrizione, sconti.sconto2 FROM sconti
UNION ALL SELECT sconti.Descrizione, sconti.sconto3 FROM sconti ORDER BY
sconto, descr;
Potrai quindi utilizzare nella tua pagina ASP questa query come una
qualsiasi tabella.
HTH.
Alessandro
PS: ho presunto che la tabella contenga, oltre alle tre aliquote, anche un
campo descrittivo. Se così non fosse (improbabile, ma non si sa mai...) puoi
usare:
SELECT "Sconto1" AS descr, sconti.sconto1 AS sconto FROM sconti
UNION ALL SELECT "Sconto2", sconti.sconto2 FROM sconti
UNION ALL SELECT "Sconto3", sconti.sconto3 FROM sconti
ORDER BY sconto, descr;


Grazie mille per la risposta, ma ho già provato ad usare UNION senza
riuscire ad ottenere il risultato che desidero. Ti spiego, ecco la struttura
del database:
ID    MARCA    SCONTO1    SCONTO2    SCONTO3
1       ford           0                    5                    0
2       renault       15                   0                    0
3       fiat            0                     0                   10
lo "sconto1" sta per sconto rottamazione, "sconto2" per sconto Km 0, e
"sconto3" per sconto generico applicato dalla concessionaria. Il risultato
dovrebbe essere:
I PIU' CONVENIENTI:
Renaut (sconto rottamazione del 15%)
Fiat (sconto promozione del 10%)
Ford (sconto Km 0 del 5%)
Utilizzando UNION il risultato sarebbe invece:
Fiat (sconto promozione del 0010%)
Ford (sconto Km 0 del 050%)
Renault (sconto rottamazione del 1500%)
Lo so che la cosa migliore era utilizzare un database relazionale o un solo
campo "sconto" con la relativa descrizione, ma per le cose che mi erano
state richieste all'inizio l'attuale struttura andava più che bene, ora mi è
stato chiesto di metterci quest'altra pagina e vorrei evitare di
ristrutturare tutto il database modificando tutte le pagine già realizzate.
Possibile che non ci sia un modo per ottenere questo risultato via query ?
A presto
Francesco Morelli

 Renault (sconto rottamazione del 1500%)
Beh, questo è un po' diverso dalla domanda originale, comunque...
Supponiamo una query SCONTO2 così fatta:
SELECT "Sc1" AS descr, Marca, sconto1 AS Sconto FROM sconti
UNION ALL SELECT "Sc2", Marca, sconto2 FROM sconti
UNION ALL SELECT "Sc3", Marca, sconto3 FROM sconti
ORDER BY sconto, marca;
Con la seguente query dovresti ottenere le tre marche più convenienti:
SELECT marca, sconto FROM sconto2 WHERE sconto=(SELECT Max(Sconto) AS
MaxSconto
FROM sconto2 WHERE descr="Sc1")
UNION ALL SELECT marca, sconto FROM sconto2 WHERE sconto=(SELECT
Max(Sconto) AS MaxSconto
FROM sconto2 WHERE descr="Sc2")
UNION ALL SELECT marca, sconto FROM sconto2 WHERE sconto=(SELECT
Max(Sconto) AS MaxSconto
FROM sconto2 WHERE descr="Sc3");
Il risultato della query è un unico recordset: per ottenere le tre
informazioni separate suppongo che tu non abbia bisogno di aiuto.
Inoltre se due marche hanno la stessa aliquota dovrebbero essere
restituite entrambe (il che mi pare corretto, ma devi essere tu a
deciderlo).
Ovviamente mi scuso per eventuali inesattezze o peggio (cosa più che
probabile giacchè non mi sono ancora del tutto ripreso dai bagordi di
questi giorni).
Ciao.
Alessandro

 Ovviamente mi scuso per eventuali inesattezze o peggio
Ma scherzi ? Grazie mille per la disponibilità :-)
A presto
Francesco Morelli

 >
Cavolo che imbecille che sono, bastava una semplicissima:
"SELECT * from nometabella order by (sconto1 + sconto2 + sconto3) DESC"
il risultato è questo :-)
http://www.italfree.it/afauto/top10.asp?mode=S
e per visualizzare anche il tipo di sconto basterebbe qualcosa tipo:
For i=1 to 10
    If rs("sconto1")<>"0" then
        response.write "Sconto rottamazione:"
        ElseIf rs("sconto2")<>"0" then
        response.write "Sconto km 0:"
        ElseIf rs("sconto3")<>"0" then
        response.write "Sconto concessionaria:"
        End If
response.write (rs("sconto1")+rs("sconto1")+rs("sconto1")) & "%"
rs.Movenext
next
anche se come dicevo non è indispensabile.
Grazie a tutti (in particolare Alessandro)
Francesco Morelli

 > > Renault (sconto rottamazione del 1500%)
Anche questo non lo capisco bene: utilizzando la union avresti 3 records
diversi (corrispondenti ai tre diversi sconti) per ciascuna marca. Cosa
intendi con, ad esempio, "Fiat (sconto promozione del 0010%)"? La soluzione
da me proposta darebbe come risultato:
Fiat Sc1 0
Fiat Sc2 0
Fiat Sc3 10
Forse mi sono invischiato in qualcosa più grande di me...
Alessandro

 diversi (corrispondenti ai tre diversi sconti) per ciascuna marca.
UNION è utilizzata generalmente per unire più tabelle differenti dello
stesso database o per i database relazionali, mentre avrebbe poco senso
utilizzarla per una stessa tabella. Se poi mi metto ad unire quattro select
della stessa tabella, o creare una nuova tabella per ordinare i risultati
trovati, o casini di questo genere, il risultato sarebbe lento e ci sarebbe
uno spreco di risorse ingiustificato. Meglio quindi un semplice ordinamento
in base alla somma dei tre tipi di sconto...
A presto
Francesco Morelli