Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5

    (SQL)Ordinamento incrociato tra più attributi - non banale

    Salve a tutti...

    Ho un problemone, un caso molto particolare.

    Ho la necessità di ordinare 2 o più attributi/colonne/campi in modo da avere una "singola" colonna ordinata... avendo 2 colonne con dei interi li dovrei ordinare in una singola lista in modo crescente o decrescente.

    In particolare ho 120 campi a singola righa...
    In pratica invece che avere una colonna con 1 campo/attributo e più valori ho tanti capi/attributi con 1 solo valore.

    ora li dovrei ordinare tutti in modo decrescente...

    spero di essere stato abbastanza chiaro...

    ho cercato tantissimo in rete e sono 4 giorni che mi ci sto scervellando... non ne ho proprio idea magari qualcuno più esperto di me saprà aiutarmi...

  2. #2
    Oh mio dio

    Guarda che SQL è fatto per trattare con tuple, non con colonne.
    Comunque non ne ho la minima idea. In tutto l'SQL che ho studiato, è l'utente a dover gestire gli attributi in tutte le query.
    Sono 120? Allora boh, mi viene in mente di fare un programmino java che te le ordina ma devi fare tutto a mano.
    Comunque in SQL non ho mai sentito di qualcosa che gestisca gli attributi e se ti serve farlo allora dovrai implementare qualche algoritmo in base all'ambiente in cui ti trovi. Potrai farlo per esempio in java o in php.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,311
    non mi e' chiaro il problema. prova a postare un esempio

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    allora vi posto l'esempio


    ATTRIBUTI----------ETA1----ETA2------ETA3
    Valori----------------10-------- 9------------12
    -------------------------11----------7-------------6

    l'ordinamento di queste colonne sarebbe 12 11 10 9 7 6....

    anche se a me basterebbe un unica riga... quindi considerando solo la prima 12 10 9...

    so che è una cosa anomala...
    ma mi servirebbe la soluzione addirittura per il 10 feb (dopodomani)... giusto per farvi capire la mia frustrazione...

    grazie mille per l'aiuto!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sarà l'ora ... ma non ho capito nulla ...

    Forse (dico forse) il database non è stato impostato in maniera corretta ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    provo ad essere più esplicito

    ho 3 colonne con dei numeri dentro....

    devo tirare fuori un unica colonna con i valori ordinati delle 3 colonne...

    ditemi se sono stato più chiaro :P

  7. #7
    Originariamente inviato da admFab
    provo ad essere più esplicito

    ho 3 colonne con dei numeri dentro....

    devo tirare fuori un unica colonna con i valori ordinati delle 3 colonne...

    ditemi se sono stato più chiaro :P
    mi suona come pivot table inversa
    http://en.wikipedia.org/wiki/Pivot_table

    EDIT insomma una cosa del genere:
    da:
    codice:
    select c1, c2, c3 from a where id = 1;
    a:
    codice:
    select c from (
    	select c1 as c from a where id = 1
    	union
    	select c2 as c from a where id = 1
    	union
    	select c3 as c from a where id = 1
    )
    order by c;

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    Ora me le studio bene e domani ti dico...




    il database è stato impostato correttamente (purtroppo)... riguarda un progetto per l'università dove è stato già esaminato dal professore. Non si tratta neanche di una cosa tanto complicata...

    database sulla popolazione.
    immaginate di avere una tabella dove ogni attributo rappresenti una età... a singola riga...
    età0 età1 età2 ... età50 ... età120
    ogni attributo contiene il numero di cittadini avente la relativa età...
    se ci sono 1000 persone che anno 50 anni dentro l'attributo età50 ci sarà il valore 1000

    ora mi si chiede di ordinare la fascia le fasce di età in modo decrescente...

    ho pensato anche ad una soluzione del tipo

    SELECT (età1 & età2 & età3) AS totale -- prendo solo 3 età per farla breve tanto gli attributi sono a dimensione fissa
    FROM DatiPopolazione
    ORDER BY totale

    unisco tutti gli attributi e poi li ordino... ma forse cosi mi perdo a cosa corrispondono ogni singolo valore... nel senso che ho una lista ordinata di numeri ma quei numeri non so a che età corrispondono...

    ditemi voi qualcosa che non so dove sbattere la testa...

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,311
    Originariamente inviato da admFab
    provo ad essere più esplicito

    ho 3 colonne con dei numeri dentro....

    devo tirare fuori un unica colonna con i valori ordinati delle 3 colonne...

    ditemi se sono stato più chiaro :P
    premesso che io abbia capito il problema!

    io penso che il problema sia molto differente tra usare 3 colonne/attributi invece di 120 colone/attributi

    io penso che sarebbe necessaria una stored procedure.

    per sole tre colonne la soluzione e' abbastanza semplice, nel senso che basterebbe distinguere i vari casi di combinazione, selezionando opportunamente la colonna con il valore minimo MAX e medio ( ripeto: sempreche' ho capito il problema )

    vediamo:

    la tua tabella dovrebbe essere questa:
    codice:
    CREATE TABLE POPOLAZIONE (
        ID         INTEGER,
        ETA001  INTEGER,
        ETA002  INTEGER,
        ETA003  INTEGER,
        ETA004  INTEGER,
        ETA005  INTEGER,
        ETA006  INTEGER,
        ETA007  INTEGER,
        ETA008  INTEGER,
        ETA009  INTEGER,
        ETA010  INTEGER,
    ......
    ......
        ETA120  INTEGER,
    );
    io risolverei con una stored,.... non vedo altre soluzioni.


    unisco tutti gli attributi e poi li ordino... ma forse cosi mi perdo a cosa corrispondono ogni singolo valore... nel senso che ho una lista ordinata di numeri ma quei numeri non so a che età corrispondono...
    comunque in ogni caso perderesti la corrispondenza del valore/colonna.


    scusami se mi permetto, ma mi sorge un dubbio:.... sicuro che il problema richiede questo output?


    ciao

    mi raccomando posta l'eventuale soluzione.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    5
    purtroppo il problema richiesto è proprio quello...

    ci sto pensando e ripensando ma anche con una stored non penso ci sia una soluzione concreta...

    ora ho un altro problemino abbastanza stupido ma che non ne vengo a capo... questioni di sintassi più che altro.

    sono su postgresql...

    ho provato una query del genere ed in "compilazione" va tutto ok...

    SELECT
    "Capofamiglia"."CodiceFiscale",
    "Capofamiglia"."Nome",
    "Capofamiglia"."Cognome"
    FROM
    public."Capofamiglia"
    ORDER BY
    "Capofamiglia"."NumeroPersoneACarico" DESC;

    se provo a fare una percentuale mi da errore....

    per esempio come faccio a calcolare/visualizzare una percentuale tra due numeri ?
    vi posto il mio esempio ma mi da errore in "compilazione"

    calcolo la percentuale di votanti in una certa sessione di voto
    data nome tipo sono chiavi
    SELECT
    "SessioneVoto"."Data",
    "SessioneVoto"."Nome",
    "SessioneVoto"."TIpo",
    "SessioneVoto"."NumeroVotantiMassimo" AS "Voto1",
    "SessioneVoto"."NumeroVotantiEffettivo" AS "Voto2",
    ("Voto1"/"Voto2")*100
    FROM
    public."SessioneVoto"
    WHERE
    "SessioneVoto"."Data" = '01-01-2010' AND
    "SessioneVoto"."Nome" = 'Liberalizzazione Acque' AND
    "SessioneVoto"."TIpo" = 'Regionale';

    mi da errore qui ("Voto1"/"Voto2")*100...
    query molto banale ma non riesco a trovare la sintassi giusta...


    se riuscirò a trovare una soluzione sarò ben felice di postarla... visto che domani ho la consegna del progetto vi farò sapere la soluzione dopo la discussione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.