Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [SQL][Access] Union e Order By

    Supponendo di avere una tabella composta da due campi di testo [nome] e [cognome], io vorrei ottenere (con una sola query) prima tutti i record che hanno [cognome] <> '' (ordinati per nome) e poi tutti i campi che hanno [cognome] = '' (sempre ordinati per nome). Ho tentato con questa query:

    SELECT * FROM ((SELECT * FROM tabella WHERE cognome <> '' ORDER BY nome) UNION (SELECT * FROM tabella WHERE cognome = '' ORDER BY nome))

    ma il risultato è l'insieme di tutti i record ordinato per nome, indipendentemente dal fatto che cognome sia = o <> da ''...

    come devo fare la query?

  2. #2
    Vuoi entrambi i gruppi ordinati per nome? Anche quelli che hanno un cognome?

  3. #3

  4. #4
    Così?



    --- Carlo
    --- Davide
    --- Marco
    Rossi Andrea
    Bianchi Mario
    Gialli Roberto

  5. #5
    Non capisco a cosa ti serva la select che racchiude tutto, la union è sufficiente per il tuo scopo.

    Prova così:
    (SELECT * FROM tabella WHERE cognome <> '' ORDER BY nome)
    UNION
    (SELECT * FROM tabella WHERE cognome = '' ORDER BY nome)
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  6. #6
    Originariamente inviato da FuocoGreco
    Così?



    --- Carlo
    --- Davide
    --- Marco
    Rossi Andrea
    Bianchi Mario
    Gialli Roberto
    Il risultato dovrebbe essere quello (in realtà mi servono prima quelli che hanno il cognome, poi quelli che non lo hanno, però il concetto è lo stesso)







    Originariamente inviato da kateetak
    Prova così:
    (SELECT * FROM tabella WHERE cognome <> '' ORDER BY nome)
    UNION
    (SELECT * FROM tabella WHERE cognome = '' ORDER BY nome)
    Provato ma mi restituisce i record in un ordine "sparso", evidentemente l'union non mantiene gli ordinamenti delle query che unisce

  7. #7
    Tagliamo la testa al toro.
    Creati una tabella temporanea dove vai a inserire i tuoi dati: prima quelli di una select poi gli altri senza union e poi fai una super select da questa tabella. Così va per forza. Alla fine uccidi la tabella temporanea.

    Se posso... ma ha un senso la cosa che stai facendo?

    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  8. #8
    Ho risolto, nel caso fosse utile a qualcun'altro:

    (SELECT *, 1 AS cognome_presente FROM tabella WHERE cognome <> '')
    UNION
    (SELECT *, 2 AS cognome_presente FROM tabella WHERE cognome = '')
    ORDER BY cognome_presente, nome

  9. #9
    Complimenti, era l'uovo di colombo.
    C'ero ad un passo, ma non ci sono arrivato


  10. #10
    La soluzione non corrisponde a quella che era la tua richiesta iniziale. Tu chiedevi di ottenere prima i cognomi diversi da '' e ordinarli per nome seguiti dai record con cognomi uguali a '' sempre ordinati per nome.

    Nella tua soluzione ordini i per cognome e, a parità di cognome, per nome.

    Questa cosa la potevi fare molto più semplicemnte con un:

    SELECT * FROM tabella
    ORDER BY cognome, nome asc/desc

    Usi asc o desc a seconda che tu voglia prima quelli con cognome diverso da '' o gli altri.

    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

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 © 2025 vBulletin Solutions, Inc. All rights reserved.