Funzioni e query

di il
15 risposte

Funzioni e query

Ciao

forse una domanda sciocca..
E' possibile creare una query che abbia come campo una funzione che abbia come parametri un campo della query stessa (o della tabella).
Esempio
SELECT campo, funzione(campo) FROM tabella

Se così fosse, dove devo definire la funzione, devo seguire qualche regola?
Credo non serva specificare che la funzione non è una di quelle disponibili, ma sarei io a scriverla

15 Risposte

  • Re: Funzioni e query

    veleno79 ha scritto:


    E' possibile creare una query che abbia come campo una funzione che abbia come parametri un campo della query stessa (o della tabella).

    veleno79 ha scritto:


    Esempio
    SELECT campo, funzione(campo) FROM tabella
    Non ci capisco nulla di SQL

    veleno79 ha scritto:


    Se così fosse, dove devo definire la funzione, devo seguire qualche regola?
    Credo non serva specificare che la funzione non è una di quelle disponibili, ma sarei io a scriverla
    Ti rispondo seguendo la visualizzazione struttura query (non SQL).
    Per quello che so io ti può convenire nominare il nuovo campo con un nuovo nome coerente, seguito dai due punti, dopo i due punti puoi scrivere una espressione sfruttando il generatore di espressioni, esempio:
    NomeNuovoCampo: [Tabella1].[CampoX]&[Tabella2].[CampoY]
  • Re: Funzioni e query

    No.. nn mi è sufficiente.. prendi un esempio più complesso.. campi: nome, cognome, datadinascita...ecc... e l'ultimo campo codicefiscale(nome,cognome,data..)
    La funzione codicefiscale() prevede una serie di elaborazioni più complicate del generatore di funzioni
  • Re: Funzioni e query

    veleno79 ha scritto:


    Ciao

    forse una domanda sciocca..
    E' possibile creare una query che abbia come campo una funzione che abbia come parametri un campo della query stessa (o della tabella).
    Esempio
    SELECT campo, funzione(campo) FROM tabella

    Se così fosse, dove devo definire la funzione, devo seguire qualche regola?
    Credo non serva specificare che la funzione non è una di quelle disponibili, ma sarei io a scriverla
    Certamente si, la Funzione deve essere definita come PUBLIC in un Modulo STANDARD ed avere dei parametri.
    Ti faccio un'esempio tanto banale quanto inutile, ma ti chiarisce.
    Ipotizziamo una Tabella con 3 campi
    
    Id
    Nome
    Cognome
    Ora realizziamo una Funzione che accetta in Ingresso 2 Parametri
    
    Public Function AddNomeCognome(strNome As String, strCognome As String) As String
       AddNomeCognome=strNome & " " & strCognome
    End Function
    Ora nella query generiamo un Campo Calcolato che sarà defninito dalla chiamata alla Funzione
    
    SELECT *, AddNomeCognome(T1.[Nome],T1.[Cognome]) AS NomeCongome
    FROM T1
    Ciao
  • Re: Funzioni e query

    Ciao a tutti

    Sono al'inizio di access.. quindi ancora sono un embrione... porgo subito il problema

    Ho la tabella Cicli con Campi: Articolo, numero cicli
    poi ho un'altra tabella con campi: Articolo, capi eseguiti.

    Mi servirebbe fare una query dove deve selezionare i capi eseguiti di ogni articolo e dividerlo per il numero di cicli dello stesso articolo. Che funzione devo usare?

    Grazie per qualsiasi consiglio.
  • Re: Funzioni e query

    Per adriana:
    Appare strano che tu debba elencare lo stesso campo (Articoli) su due tabelle diverse. Ne ignoro il perchè, sperando che il numero di record di entrambe le tabelle sia uguale. A parità di numero di record:
    1) Importa entrambe le tabelle in query
    2) Congiungi i due campi Articoli con una linea di join
    3) Trascina i campi "Capi eseguiti" e "Numero cicli" nella griglia (forse è superfluo, ma fallo se dovessi avere problemi di sintassi)
    4) Scrivi su una nuova colonna la seguente sintassi:
    Rapporto: [Capi eseguiti]/[Numero cicli]
  • Re: Funzioni e query

    Ho fatto 2 tabelle diverse perchè la tabella Cicli si aggiorna ogni volta quando ho un articolo nuovo
    L'altra tabella (capi giornalieri eseguiti), inserisco ogni giorno i capi eseguiti , un articolo è eseguito in più giorni.
    ESEMPIO: Articolo 1455 ha 10 cicli, totale capi da fare 100
    01/04 faccio 20 capi(ciclo 1 e ciclo 2), quindi i capi fatti sono 20/10=2 capi
    02/04 30 capi ..... 30/10 =3 capi.. e cosi via finchè faccio tutti i cicli e finisco i 100 capi

    Riassumo: La prima tabella la uso solo per inserire nuovi articoli
    La seconda ogni giorno.... da qui neanche i record non sono uguali
  • Re: Funzioni e query

    Adriana, io non capisco niente quando non mi raccontano papale papale tutti i nomi tabelle con i nomi campo precisi e le loro relazioni. Dopo di che, mi spieghi cosa vuoi realizzare. Se devi fare esempi di valori, elencane almeno 3 per rendere l'idea.
  • Re: Funzioni e query

    Scusa Osvaldo.... cerco di essere più chiara.. allora...sto creando un db dove devo fare l'evidenza della produzione fatta ogni giorno. Quindi ho vari articoli ( art. a; b; c)per fare questi articolo (parliamo di maglie), ci sono i vari cicli (oppure fasi), per fare una maglia devo cucire le spalle (fase 1), poi devo cucire le maniche (fase 2) e cosi tutte le fasi (che sono diversi da un articolo a altro), finche non ho la maglia finita. Dunque mi arriva un articolo dal cliente, ho la tabella cicli con i campi 'Articolo' e 'nr.cicli' es( art. 1550 ; nr cicli= 10; art 1551, nr. cicli= 11; art. 1552, nr. cicli= 12).
    Inizia il lavoro, alla fine giornata il personale mi porta dei foglietti con cosa hanno fatto il giorno respettivo.... io ho la tabella 'capi giornalieri eseguiti' con i campi Data; articolo; Q.ta fatta

    es( 01/04, art.1550; q-ta 100;
    02/04, art 1550, q-ta 90
    02/04 art. 1551 q-ta 159
    03/04 art. 1552 q-ta 80....)

    una volta inserito.. mi serve una formula (magari creando una query, oppure ci posso aggiungere un nuovo campo nella tabella capi giornalieri) dove la q-ta fatta (campo della tabella capi giornalieri eseguiti) va diviso su nr. cicli (tabella 'nr. cicli').. quindi devo avere il seguente risultato: 01/04: 100(maglie)/10(nr cicli)=10: 02/04: 90/10=9; 02/04: 159/11=14,4; 03/04: 80/12=6,7.

    spero che mi sono spiegata
    Grazie che mi aiuti... e che magari perdi i nervi con me.
  • Re: Funzioni e query

    Da quello che mi stai dicendo, io ho capito il seguente scendario tabelle:

    CICLI (che io avrei chiamato tranquillamente ARTICOLI, i Cicli sono una caratteristica strettamente legata a ciascun Articolo)
    Articolo (presuppongo che abbia l'impostazione come chiave primaria)
    Numero cicli

    CAPI ESEGUITI (non occorre nominarla con la parola giornalieri perchè la tabella tiene traccia di tutte le date lavorative...sarà la query a filtrare la data odierna...lo vediamo dopo)
    IDCapoEseguito (contatore)
    Data
    Articolo
    Quantità

    Relazione CICLI.Articolo uno-a-molti con [CAPI ESEGUITI].Articolo (questa relazione è importantissima per impostare correttamente la query)

    1) Apri una nuova query in visualizzazione struttura
    2) Importa le 2 tabelle (che appariranno automaticamente con il join di relazione)
    3) Trascina i campi Data, Articolo (è indifferente da quale tabella lo prendi visto che è numerico in entrambe), Quantità, Numero cicli
    4) Alla colonna Data, in corrispondenza di Criteri, scrivi la seguente sintassi:
    =Date()
    5) In una colonna vuota aggiungi la sintassi che avevo proposto, quindi:
    Rapporto: [Quantità]/[Numero cicli]
    6) Salva la query con nome

    La query con il suo =Date() filtrerà tutti i Capi Eseguiti in data corrente, quindi è importante che tu faccia questa operazione ogni giorno immediatamente dopo che ti venga portato il foglietto di rendiconto dal personale. Se dimentichi di farlo oggi e pretendi di farlo domani, domani la query ti restituirà i dati di domani, ignorando quelli del giorno prima (ovvio).
  • Re: Funzioni e query

    Rieccomi Osvaldo

    allora ho fatto come mi hai detto, e mi da i capi al giorno eseguiti, solo che non ho messo =Date(), ma vedo che mi funziona lo stesso, vedo la q-ta fatta per ogni giorno e ogni articolo aparte.



    grrazie mille
  • Re: Funzioni e query

    Riciao a tutti

    sto facendo dei piccoli passi nel imparare access.... allora ho una domanda se mi potete aiutare.....

    Ho tabella 'Inserimento Articoli' con campi : Data, Articolo, commesa, Q-ta da fare.
    es di inserimento: 10.04.13, art 1550, commesa 1050, Q-ta 100
    10.04.13 art 1550, commesa 1051, Q-ta 150
    10.04.13 art. 1988 comm. 2033, Q-ta 100
    Poi ho una tabella con i campi: Data, articolo, Q-ta fatta
    es: 10.04.13, art. 1550, Q-ta fatta 20
    11.04.13, art 1550, Q-ta fatta 20
    11.04.13 art 1988, Q-ta fatta 30.

    Mi serve una formula dove mi calcola la Q-ta da fare, però i art me li deve gruppare ( art 1550 sono 250 capi) Quindi il resultato sara art. 10.04.13, art1550: 250-20=230; 11.04.13, art 1550: 230-20=210; 11.04.13 art. 1988: 100-30=70.

    Mi potete consigliare per favore

    Grazie mille
  • Re: Funzioni e query

    Attenta adriana, nelle tue descrizioni di tabelle noto che ignori sempre il campo chiave primaria (solitamente lo si chiama ID). La tabella "Inserimento articoli" non è molto diversa da CAPI ESEGUITI...tra l'altro quest'ultima denominazione l'ho data io per cercare di venire incontro al tuo discorso, ma temo che sia la mia precedente risposta che la nuova ipotetica non fanno i conti con una strutturazione tabelle coerente. Potresti descrivere tutte le tabelle con nomi di campo e relazioni? Temo che il tuo problema non sia soltanto di ricerca formule.
  • Re: Funzioni e query

    Rieccomi… allora ho un db dove ho le tabelle : [Inserimento Articoli] con campi :Id_Articolo (contatore) Data, Articolo, commesa, Q-ta da fare (essempi ho fatto più giù),non ha nessuna relazione; Tabella [CICLI ] con campi: Id_Articolo (chiave primaria), Articolo, Numero cicli; tabella [CAPI ESEGUITI] con campi: IDCapoEseguito (contatore), Data,Articolo,ciclo, Quantità fatta; tabella CICLI.Articolo è in relazione uno-a-molti con [CAPI ESEGUITI].Articolo ,
    Ho fatto una query dove ho trascinato le tabelle [CICLI] e [CAPI ESEGUITI] mettendoci i campi: Data, Articolo, Q-ta processi, poi ho creato un nuovo campo ‘capi eseguiti’(che sarebbero finiti) inserendo la formula : Somma([Q-ta fatta]/[Q-ta_processi]), adesso mi serve i capi da fare per ogni articolo (att. Un articolo può avere più commesse, ma a me interessa solo articolo con i capi totali delle commesse) Q-ta da fare= Q-ta da fare-capi eseguiti
  • Re: Funzioni e query

    Il database non è strutturato in maniera normale, è pieno di ridondanze e contraddizioni.
    Andiamo passo passo.
    Che vuol dire "Commessa"? È il nome della Commessa che si occupa del lavoro? Oppure significa Ordine?
    Se Commessa significa Ordine, in un Ordine sarebbero previsti anche molti Articoli?
    Un Articolo è sempre e solo rappresentato da un Numero? Mi sembra strano che non sia previsto almeno un campo Descrizione comprensibile all'occhio umano.
    Continuo a non cogliere l'utilità del campo NumeroCicli, me lo hai spiegato, ma il contesto adesso si è ingarbugliato ulteriormente.
    La relazione che ti avevo suggerito nella query non serve perchè occorrerà cambiare l'intero scenario relazionale di tutte le tabelle: lo vediamo in un secondo momento, per ora rispondimi alle domande.
Devi accedere o registrarti per scrivere nel forum
15 risposte