Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431

    [Access SQL] Problema query con filtro

    Ciao ho questa query
    codice:
    SELECT pratiche_controlli_originale.pratica, pratiche.pratica, IIf(([pratiche.dataControllo] Is Not Null),"già controllata",IIf (([pratiche].[pratica] Is Not Null),"pervenuta da controllare","non pervenuta")) AS Nota, pratiche.dataControllo, IIf([codPrest] Is Null,"",IIf([codPrest]=2,"X","")) AS Espr1, prest177.codPrest, pratiche.codFormazione, IIf([codArchiviata]=1,"X","") AS archiviata,pratiche.nota_anomalia, pratiche.nota_avanzo
    FROM (pratiche_controlli_originale LEFT JOIN pratiche ON pratiche_controlli_originale.pratica = pratiche.pratica) LEFT JOIN prest177 ON pratiche.idpratica = prest177.idPratica
    GROUP BY pratiche_controlli_originale.pratica, pratiche.pratica, IIf(([pratiche.dataControllo] Is Not Null),"già controllata",IIf (([pratiche].[pratica] Is Not Null),"pervenuta da controllare","non pervenuta")), pratiche.dataControllo, IIf([codPrest] Is Null,"",IIf ([codPrest]=2,"X","")), prest177.codPrest, pratiche.codFormazione, IIf([codArchiviata]=1,"X",""), pratiche.nota_anomalia, pratiche.nota_avanzo, pratiche_controlli_originale.dataEmail
    HAVING (((IIf([codPrest] Is Null,"",IIf([codPrest]=2,"X",""))) Is Null Or (IIf([codPrest] Is Null,"",IIf([codPrest]=2,"X","")))=2) AND ((pratiche_controlli_originale.dataEmail)=#10/1/2015#))
    ORDER BY pratiche_controlli_originale.pratica;
    devo fare alcune sostituzioni per poi esportare su un file excel.
    il mio problema e' che se metto nella clausola having "Is Null Or 2" (che access trasforma come sopra e che mi serve per filtrare la colonna prest o espr1) mi restituisce che i tipi di dati non corrispondono.
    Se la tolgo non mi da problemi, ma non ho i dati corretti che mi servono. Nel campo espr1 mi servono solamente i valori vuoti (null) oppure 2. In questa colonna posso avere come valori null, 0 oppure 2.
    Si puo' fare in una query o devo trovare un altro metodo? Stavo cercando di farlo con le query, dato che sono piu' veloci, cosi' da non dover farmi una funzione che lavora su excel.
    grazie a chi mi dara' una mano.
    Ultima modifica di abellos; 05-10-2015 a 17:27
    Da un grande potere derivano grandi responsabilità

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Nella query non ci ho capito nulla, ci sono i nomi troppo lunghi per il mio povero cervellino

    Quote Originariamente inviata da abellos Visualizza il messaggio
    il mio problema e' che se metto nella clausola having "Is Null Or 2" (che access trasforma come sopra e che mi serve per filtrare la colonna prest o espr1) mi restituisce che i tipi di dati non corrispondono.
    Il tuo campo in cui vuoi filtrare il 2 ha formato testo oppure numerico ????
    quel messaggio dato da access significa che stai filtrando il numero 2 in un campo testo !!!



    Quote Originariamente inviata da abellos Visualizza il messaggio
    Nel campo espr1 mi servono solamente i valori vuoti (null) oppure 2.
    HAVING Nz(espr1,2)=2


    facci sapere
    Ultima modifica di nman; 05-10-2015 a 22:13

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    Il mio campo e' numerico, ma facendo la query puo' non essere valorizzato perche' non tutti i numeri di pratica sono presenti nella tabella. Allego un'immagine che magari si capisce di piu', effettivamente e' un po incasinata.
    Sulla colonna Nota faccio
    codice:
    Nota: IIf(([pratiche.dataControllo] Is Not Null);"già controllata";IIf(([pratiche].[pratica] Is Not Null);"pervenuta da controllare";"non pervenuta"))
    sulla colonna archiviata:
    codice:
    archiviata: IIf([codArchiviata]=1;"X";"")
    sulla colonna espr1:
    codice:
    Espr1: IIf([codPrest] Is Null;"";IIf([codPrest]=2;"X";""))
    Ho messo questi iif per poter sostituire dei valori con delle X o dei valori vuoti.
    Sto provando cosi ma non riesco a farla funzionare
    codice:
    Espr1: Nz(IIf([codPrest]=2;"X";"");0)
    http://s23.postimg.org/90oaeh5t7/Immagine.png
    Immagini allegate Immagini allegate
    Ultima modifica di abellos; 06-10-2015 a 09:32 Motivo: aggiunto link immagine, l'allegato nn si vedeva
    Da un grande potere derivano grandi responsabilità

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Non è che abbia capito molto del problema ma!!!!

    Il campo "Nota" era sintatticamente corretto, comunque mi sembra piu "snello" come proposto sotto.

    Il campo "Espr1" se ho capito bene lo usavi solamente per filtrare il campo "codPrest"
    lo ho eliminato mettendo una Or nelle condizioni

    Il campo "archiviata" non lo ho capito nel significato, comunque è una semplice IIf ben scritta e lo lascerei cosi come è

    Il campo "pratiche.dataControllo" è una data, Giusto ????
    ho usato la condizione IsDate invece di verificare se Nullo

    PS: Se devi copincollare il codice vai in modalità "Rispondi quotando" per copiare
    temo che il sito abbia dei problemi,
    codice:
    SELECT 
    pratiche_controlli_originale.pratica, 
    pratiche.pratica, 
    IIf(IsDate([pratiche.dataControllo]),"già controllata",IIf(Len([pratiche].[pratica] & ""),"pervenuta da controllare","non pervenuta")) AS Nota, 
    pratiche.dataControllo, 
    prest177.codPrest, 
    pratiche.codFormazione, 
    IIf([codArchiviata]=1,"X","") AS archiviata, 
    pratiche.nota_anomalia, 
    pratiche.nota_avanzo
    FROM 
    (
    pratiche_controlli_originale 
    LEFT JOIN 
    pratiche 
    ON 
    pratiche_controlli_originale.pratica = pratiche.pratica
    ) 
    LEFT JOIN 
    prest177 
    ON 
    pratiche.idpratica = prest177.idPratica
    GROUP BY 
    pratiche_controlli_originale.pratica, 
    pratiche.pratica, 
    IIf(IsDate([pratiche.dataControllo]),"già controllata",IIf(Len([pratiche].[pratica] & ""),"pervenuta da controllare","non pervenuta")), 
    pratiche.dataControllo, 
    prest177.codPrest, 
    pratiche.codFormazione, 
    IIf([codArchiviata]=1,"X",""), 
    pratiche.nota_anomalia, 
    pratiche.nota_avanzo, 
    pratiche_controlli_originale.dataEmail
    HAVING 
    (
    ((prest177.codPrest)=2 Or (prest177.codPrest) Is Null) 
    AND 
    ((pratiche_controlli_originale.dataEmail)=#10/1/2015#)
    )
    ORDER BY 
    pratiche_controlli_originale.pratica
    ;
    facci sapere

    .
    Ultima modifica di nman; 07-10-2015 a 01:58

  5. #5
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    Ciao nman,
    grazie dell'aiuto ma nel campo codprest devo anche effettuare una sostituzione con le iif e inserendo l'having non funziona, penso sia un limite di access a questo punto.
    Comunque ho risolto cambiando strategia, ho fatto la query senza nessun iif e poi la ciclo e scrivo sulle celle excel quello che mi serve in base ai valori dei campi della query stessa, evitando di usare la funzione DoCmd.TransferSpreadsheet che penso sia piu' veloce come esecuzione. Anche così pero' mi sembra buona come velocità.
    grazie e ciao
    Da un grande potere derivano grandi responsabilità

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da abellos Visualizza il messaggio
    ........ penso sia un limite di access a questo punto. .......
    Direi di No,
    le query di Access sono fin troppo "Gentili" e ti lasciano fare tutto quello che vuoi

    Il problema è che non ho capito la logica di quello che vuoi nel campo Expr1 che avevo eliminato
    poi quei nomi "chilometrici" certo non aiutano la comprensione sintattica

    .

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.