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

    Vista con stesso campo in colonne diverse

    Vorrei creare una vista o una query per gestire orari di entrate/uscite di operai su più turni.
    Nel mio caso ho due tabelle,
    la tabella eventi :
    eventi.PNG
    la tabella personale:
    personale.PNG
    Nella tabella personale ho tutte le info riguardante l'utente , mentre nella tabella eventi registro l'evento entrata/uscita/malattia e varie.

    Il mio dubbio ora e' questo, volendo avere un prospetto giornaliero per ogni utente esempio:
    prospetto.PNG
    Come posso fare? il mio problema è che non riesco a scindere oraentrata1,oraentrata2 e lo stesso per le uscite perché sono lo stesso campo ma eventi diversi.
    Quindi facendo select acceday, accepers, acceora as oraentrata1, acceora as oraentrata2 e cosi via non è possibile..

    Spero di essere stato chiaro!

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    La soluzione è difficile perché non hai la certezza sui dati in ingresso

    ti troverai certamente
    - ingressi senza uscite
    - uscite senza ingressi
    - Ingressi doppi
    - Uscite doppie
    - eccetera

    1°)
    Se tu almeno non avessi il doppio controllo del mattino e pomeriggio potresti cavartela con meno problemi prendendo la prima e ultima registrazione della giornata

    2°)
    Invece con la pausa puoi prendere la 1° 2° 3° e 4° registrazione della giornata
    ma ti aumentano in modo esponenziale gli errori di registrazione

    3°)
    Oppure imporre che l'utente quando si registra dica (al sistema) di quale delle 4 registrazioni si tratta
    (questo significa anche avere dei registratori predisposti)

    Comunque sappi che in ogni caso è una rogna, nelle aziende c'è sempre un incaricato a correggere le registrazioni


    Facci sapere quale strada vuoi percorrere

    .
    Ultima modifica di nman; 06-04-2017 a 13:19

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15
    Ciao NMan, innanzitutto grazie della risposta!
    Si, esatto anche nella mia azienda c'è un incaricato addetto al controllo delle registrazioni, cercavo solo di sapere come fare per rappresentare giornalmente entrate e uscite in una riga sola come da foto.
    Gli errori di registrazione (es 2 accessi in entrata, 1 uscita) li gestisce un addetto, l'importante è che i dati ci siano tutti e non venga tralasciato nessun evento.

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Immaginiamo di avere la tabella T1 con i campi:


    Nomx ---- nvarchar(255) ----- Il nome
    Datx ---- datetime ---------- La data
    Orax ---- Float ------------- L'orario (perche poi float ??? )
    Idxx ---- int --------------- Contatore (Inutile per l'esempio)




    Nel campo Datx (datetime) che tu usi solo per la data potrebbe stsrci anche la parte oraria
    allora per dormire tranquilli ne estraiamo il "CONVERT(varchar(10), Datx, 102)" che nel caso
    ti estrae solamente la data senza orario




    Uno dei procedimenti é:
    Raggruppi per Nomx e Datx trovando il conteggio di Orax minore dell'attuale
    cosi per ogni Nomx avrai un conteggio sequenziale (sequ) uguale a 0, 1, 2, 3, eccetera
    che sono le registrazioni effetuate nella stessa Datx
    codice:
    SELECT TOP (100) PERCENT 
    Nomx, 
    CONVERT(varchar(10), Datx, 102) AS gggg, 
    Orax,
    (SELECT COUNT(Orax) AS cccc FROM dbo.T1 AS V2 WHERE (Nomx = V1.Nomx) AND (CONVERT(varchar(10), Datx, 102) = CONVERT(varchar(10), V1.Datx, 102)) AND (Orax < V1.Orax)) AS sequ
    FROM  dbo.T1 AS V1
    GROUP BY Nomx, CONVERT(varchar(10), Datx, 102), Orax



    Fatta la prima Vista ( Chiamimola V5 ) ne facciamo una secovda che incolonni
    in 4 colonne i campi a seconda del numero sequ trovato
    codice:
    SELECT     
    Nomx, 
    gggg, 
    MAX(CASE WHEN sequ = 0 THEN Orax END) AS or1, 
    MAX(CASE WHEN sequ = 1 THEN Orax END) AS or2, 
    MAX(CASE WHEN sequ = 2 THEN Orax END) AS or3, 
    MAX(CASE WHEN sequ = 3 THEN Orax END) AS or4
    FROM  dbo.V5
    GROUP BY Nomx, gggg



    Dopo se preferisci puoi nidificare le 2 viste in una unica

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15
    Ciao, premesso che non ho le basi per poterlo dire ma, mi pare che nel tuo caso perda dei dati se ho un numero di entrate/uscite maggiore di 4.
    Non sapendo a priori quante volte marchino i dipendenti esiste un altro modo oltre a quello che hai descritto tu?

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da andrewkp Visualizza il messaggio
    ...... perda dei dati se ho un numero di entrate/uscite maggiore di 4. .......
    Avevo immaginato questa obbiezione
    Fatti anche 10 campi ( se qualcuno si registra più di 10 volte è ......... )

    poi ci sara necessariamente qualcuno incaricato che nei casi dubbi legge i 10 campi e li interpreta correggendo le registrazioni

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15
    Perfetto, provo adattando il codice che hai postato con il mio database, nel caso riscrivo =)

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15
    Ciao Nman, innanzitutto ti ringrazio per la collaborazione. Premesso che ho recepito perfettamente quello che mi hai detto, ti vorrei fare una domanda a scopo didattico.
    Volendo utilizzare i pivot per poter trasformare le righe in colonna e' possibile? Se si, sapresti dirmi come fare?

  9. #9
    di quale db stiamo parlando? Le istruzioni pivot possono essere differenti, per questo il regolamento dice di indicare il db già nel titolo

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15
    Pardon, al momento in cui ho riletto il regolamento ho tentato di cambiare il titolo ma non ci sono riuscito, stiamo parlando di SQL Server comunque.

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.