Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

funzione nz

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

funzione nz

Postdi MINU » 14/06/05 21:23

:undecided: Ho un grandissimo problema e spero che mi possiate aiutare.
Su un campo della query che mi calcola il totale della somma delle ore di straordinario, passo il campo su una funzione Nz per i valori Null,
ma la conversione dei dati esistenti me la restituisce con numero decimale e, non in formato ora.
grazie mille
MINU
Newbie
 
Post: 7
Iscritto il: 14/06/05 21:03

Sponsor
 

Postdi archimede » 15/06/05 07:51

Se stai facendo la somma di un campo tipo Data è normale (e non c'entra la Nz).

Sarebbe stato utile se avessi specificato con quale db stai lavorando e con che tipo di campo; nel caso di Access puoi provare:
Codice: Seleziona tutto
Format(Int(Sum(campoData)*24),"000")
HTH.

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi MINU » 15/06/05 21:44

Sto usando db di access.
Il campo TOTALE della query è di tipo data/ora.
E' il risulatato della differenza delle ore di due campi "dalle ore" "alle ore" di tipo data/ora.
Questo campo lo dovrei sommare ad un'altro uguale.
Ambedue hanno valori null "campi vuoti".
Passandolo con la funzione Nz mi restituisce gli zeri nei campi vuoti ma nei campi pieni -es dove ho come risultato "4.30 inteso come ora" mi restituisce un numero decimale -es 1,03056 eno "4.30.

Questa è l'espresione:
Espr1: Nz([Z Straordinario festivo notturno ok]![Straordinario notturno];0)
ciao grazie
MINU
Newbie
 
Post: 7
Iscritto il: 14/06/05 21:03

Postdi archimede » 16/06/05 07:20

Posta la query.

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi MINU » 16/06/05 21:26

SELECT [E Generale Straordinario notturno].Giornata, Count([E Generale Straordinario notturno].Idmod14) AS ConteggioDiIdmod14, [E Generale Straordinario notturno].Nr, [E Generale Straordinario notturno].[Nome Cognome], [E Generale Straordinario notturno].[Mattino dalle ore], [E Generale Straordinario notturno].[Mattino alle ore], [E Generale Straordinario notturno].[Sera dalle ore], [E Generale Straordinario notturno].[Sera alle ore], Sum([Mattino dalle ore]+#12/30/1899 0:15:0#+[Mattino alle ore]-#12/30/1899 5:45:0#) AS [Straordinario notturno], Sum(24-[Sera dalle ore]-#12/30/1899 6:0:0#) AS [Straordinario di prima notturno]
FROM [E Generale Straordinario notturno]
GROUP BY [E Generale Straordinario notturno].Giornata, [E Generale Straordinario notturno].Nr, [E Generale Straordinario notturno].[Nome Cognome], [E Generale Straordinario notturno].[Mattino dalle ore], [E Generale Straordinario notturno].[Mattino alle ore], [E Generale Straordinario notturno].[Sera dalle ore], [E Generale Straordinario notturno].[Sera alle ore]
HAVING ((([E Generale Straordinario notturno].Giornata)="Festiva" Or ([E Generale Straordinario notturno].Giornata)="Superfestiva"))
ORDER BY [E Generale Straordinario notturno].Nr;

Questa è lq query che contiene i valori null e da cui dovrei estarre le somme degli straordinari.

Mi spieghi per favore come faccio a conteggiare la mezzanote come 24.00 e non come 00.00, se ci sono funzioni mi dici dove la devo inserire
grazie.
MINU
Newbie
 
Post: 7
Iscritto il: 14/06/05 21:03

Postdi archimede » 17/06/05 07:42

Non capisco a che ti serve la GROUP BY: hai casi in cui TUTTI i campi della GROUP BY sono ESATTAMENTE IDENTICI in due o più records?

E a che servono 12/30/1899 0:15:0, 12/30/1899 5:45:0 e 12/30/1899 6:0:0?

I campi * dalle ore e * alle ore sono di tipo data e contengono gli orari di entrata/uscita? La parte data di questi campi è valorizzata o è sempre zero? E che tipo di calcolo ci vuoi fare esattamente?

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi MINU » 20/06/05 09:15

• In pratica ho tre tabelle principale di inserimento dati:
Tabella Per anno
Tabella Per mese e giorno
Tabella Dipendenti,
tutti e tre collegati con ion “uno a molti” ed in ordine di elenco inseriti come foglio dati secondario

• Nella tabella dipendenti i campi sono: nome e cognome , posti di lavoro e orario di lavoro (Campo DATA/ORA) diviso in tre fasce giornaliere: Mattino dalle/alle ore (sono due campi), Pomeriggio dalle/alle ore(sono due campi), e Sera dalle /alle ore(sono due campi).

• Sulle tabelle ho creato una query “generale” che mi recupera tutti i record.

• Ho creato un’altra query per effettuare i conteggi e da cui ricavo i campi straordinario:
Straordinario Mattino = l’espressione che inserisco e la seguente
“mattino alle ore –mattino dalle ore -6h (che sarebbe il numero di ore lavorative giornaliere)

Straordinario Pomeriggio= Pomeriggio alle ore- Pomeriggio dalle ore -6h;

Straordinario Sera- qui ti devo precisare che avendo riscontrato il problema per quando riguarda il formato ore,siccome 24.00 inteso come mezzanotte non me lo prende ho fatto cosi
Straordinario Sera = 24 - Sera dalle ore -6 , ho impostato direttamente 24 al posto del campo “sera dalle ore”----------------se c’è qualche consiglio che mi puoi dare, per quando riguarda il formato 24.00 ti ringrazio---------------------------------------------------------------------------------------------------

Esempio aiutarti a capire , quando inserisco i dati metto:
Anno 2005
Mese gennaio, giorno 25 aprile 05
Dopo inserisco i dipendenti egli orari.

Preciso che in un giorno un dipendente può effettuare solo un turno es: tizio oggi lavora di mattino
e quindi i campi pomeriggio e sera restano null, domani lavora di pomeriggio e quindi…………restano null
il problema sorge quando vado a creare una query che mi deve sommare le ore mensili di straordinario indipendentemente dalla fascia di turno lavorativo

ho anche provato ad impostare i valori predefiniti dei campi a zero, ma non va bene in quanto in alcuni campi mi restituisce il risultato errato delle operazioni.


Ciao grazie
MINU
Newbie
 
Post: 7
Iscritto il: 14/06/05 21:03

Postdi archimede » 20/06/05 09:53

Alcune considerazioni generali.
MINU ha scritto:• In pratica ho tre tabelle principale di inserimento dati:
Tabella Per anno
Tabella Per mese e giorno
Tabella Dipendenti,
tutti e tre collegati con ion “uno a molti” ed in ordine di elenco inseriti come foglio dati secondario
Mi stai dicendo che hai due tabelle il cui unico scopo è contenere l'anno ed il mese/giorno? Se ho capito bene, questo potrebbe essere un buon esempio per il glossario alla voce Masochismo. :)
MINU ha scritto:• Nella tabella dipendenti i campi sono: nome e cognome , posti di lavoro e orario di lavoro (Campo DATA/ORA) diviso in tre fasce giornaliere: Mattino dalle/alle ore (sono due campi), Pomeriggio dalle/alle ore(sono due campi), e Sera dalle /alle ore(sono due campi).

<snip>

Preciso che in un giorno un dipendente può effettuare solo un turno es: tizio oggi lavora di mattino
e quindi i campi pomeriggio e sera restano null, domani lavora di pomeriggio e quindi…………restano null
Altro esempio di disegno di base dati non normalizzato: a che ti servono 6 campi quando sai già che ne userai comunque sempre e solo due?

Il mio consiglio è cambiare il disegno della base dati.

Una tabella Dipendenti:

- ID_Dipendente (contatore)
- Cognome
- ecc.

Una tabella Movimenti:

- ID_Dipendente (Intero lungo)
- Ingresso (Data)
- Uscita (Data)

Quest'ultima conterrà sia la data (gg/mm/aaaa) sia l'ora (hh:mm:ss) di ogni "timbratura" (così hai anche il bonus di poter gestire turni a cavallo della mezzanotte, cosa che non mi sembra facile con l'attuale struttura). Se proprio ti serve (ma dovrebbe essere possibile desumerlo dall'ora di Ingresso) puoi aggiungere un campo Turno (Byte --> 1=Mattino 2=Pomeriggio 3=Sera).

Partendo da questo struttura "pulita" si possono facilmente costruire tutte le queries che ti servono.

Se, invece, non potessi o non volessi cambiare la struttura del db si può comunque provare a sistemare in qualche modo il tuo problema.

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi MINU » 23/06/05 09:30

E' vero,
ci stavo pensando al fatto di unificare le tabelle.
Per quanto riguarda i campi turno è vero che per ogni persona ne uso solo uno, ma in totale li devo visualizzarli tutti, in reporter.
es.
per il giorno 00/00/00 -50 dipendenti hanno il proprio turno di lavoro, chi di mattina, chi di pomeriggio e chi di sera.
Il giorno 00/00/00 tutti i turni e posti di servizio verrano stampati con un reporter es chiamati turni del ......

Quindi cosa faccio?
va bene unisco le tabelle en faccio una (Anche se questo è il male minore).
Devo assolutamente e il piu presto possibile risolvere questo problema
MINU
Newbie
 
Post: 7
Iscritto il: 14/06/05 21:03

Postdi archimede » 23/06/05 09:38

MINU ha scritto:Per quanto riguarda i campi turno è vero che per ogni persona ne uso solo uno, ma in totale li devo visualizzarli tutti, in reporter.
es.
per il giorno 00/00/00 -50 dipendenti hanno il proprio turno di lavoro, chi di mattina, chi di pomeriggio e chi di sera.
Il giorno 00/00/00 tutti i turni e posti di servizio verrano stampati con un reporter es chiamati turni del ......
Scusa ma non riesco a capire cosa stai dicendo. E poi cos'è reporter?
MINU ha scritto:Quindi cosa faccio?
Mi sa che se mi mandi il db (in formato A97, se possibile, e con pochi dati di esempio) facciamo prima: se vuoi mandami un MP.

Alessandro
archimede
Moderatore
 
Post: 2753
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi MINU » 23/06/05 21:20

adesso lo preparo e poi te lo mando
ci allego un documento word per farmi capire meglio.
ok Grazie mille
MINU
Newbie
 
Post: 7
Iscritto il: 14/06/05 21:03


Torna a Programmazione


Topic correlati a "funzione nz":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti

cron