+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: Query a campi incrociati problema

  1. #1
    Falco69 non è in linea Scolaretto
    Post
    200

    Query a campi incrociati problema

    Salve a tutto il forum, che come sempre ringrazio in anticipo.

    codice:
    TRANSFORM IIf([Presente]=False And IsNull([DaOre]) And IsNull([AOre]),[Tipo],IIf([Presente]=True And IsNull([DaOre]) And IsNull([AOre]),"Inserire orario",IIf([Presente]=True And Not IsNull([DaOre]) And IsNull([AOre]),"Inserire Orario Fine Turno",IIf([Presente]=True And IsNull([DaOre]) And IsNull([AOre]),"Inserire Orario Inizio Turno",IIf([Presente]=True And Not IsNull([DaOre]) And Not IsNull([AOre]),[DaOre] & "/" & [AOre],IIf([Presente]=False And Not IsNull([DaOre]) And Not IsNull([AOre]),"Errore Controllare",IIf([Presente]=False And IsNull([DaOre]) And Not IsNull([AOre]),"Errore Controllare",IIf([Presente]=False And Not IsNull([DaOre]) And IsNull([AOre]),"Errore Controllare",IIf([Presente]=True And IsNull([DaOre]) And Not IsNull([AOre]),"Inserire Orario Inizio Turno"))))))))) AS Turno
    SELECT [Cognome] & " " & [Nome] & " " & [Grado] AS UserE
    FROM T_User INNER JOIN T_UserTurni ON T_User.IDUser = T_UserTurni.IDUser
    GROUP BY T_UserTurni.IDTurni, T_UserTurni.Presente, T_UserTurni.DaOre, T_UserTurni.AOre, T_UserTurni.Pausa, T_UserTurni.Tipo, T_UserTurni.PP, T_UserTurni.SIRIS, T_User.IDUser, T_User.Grado, T_User.Cognome, T_User.Nome, T_User.PosNr
    ORDER BY T_User.PosNr
    PIVOT T_UserTurni.Data;
    Salve a tutti il mio problema è quello di non riuscire a raggruppare in una sola riga il campo calcolato "UserE".

    Così ottengo in parte quello che mi servirebbe.

    codice:
    TRANSFORM Max([DaOre] & "/" & [AOre]) AS Turno1
    SELECT [Cognome] & " " & [Nome] & " " & [Grado] AS UserE, T_User.PosNr
    FROM T_User INNER JOIN T_UserTurni ON T_User.IDUser = T_UserTurni.IDUser
    GROUP BY T_User.PosNr, T_User.Cognome, T_User.Grado, T_User.Nome, T_User.PosNr
    ORDER BY T_User.PosNr
    PIVOT T_UserTurni.Data;
    Chiedo se sia possibile avere il risultato del secondo codice (nello specifico denominato "Turno1") inserendo i campi del primo codice (nello specifico denominato "Turno")

    Ho fatto una ricerca nel forum l'unica cosa che "forse" ho capito, il problema risiede in GROUP BY ma non ne vengo a capo.

    Thanks mille a tutti e grazie per il tempo dedicato

  2. #2
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,756
    dunque, analizzando solo l'iif della prima, che indento per comodità:
    codice:
    1 IIf([Presente]=False And IsNull([DaOre]) And IsNull([AOre])
    2	,[Tipo]
    3	,IIf([Presente]=True And IsNull([DaOre]) And IsNull([AOre])
    4		,"Inserire orario"
    5		,IIf([Presente]=True And Not IsNull([DaOre]) And IsNull([AOre])
    6			,"Inserire Orario Fine Turno"
    7			,IIf([Presente]=True And IsNull([DaOre]) And IsNull([AOre])
    8				,"Inserire Orario Inizio Turno"
    9				,IIf([Presente]=True And Not IsNull([DaOre]) And Not IsNull([AOre])
    10					,[DaOre] & "/" & [AOre],
    11					IIf([Presente]=False And Not IsNull([DaOre]) And Not IsNull([AOre])
    12						,"Errore Controllare"
    13						,IIf([Presente]=False And IsNull([DaOre]) And Not IsNull([AOre])
    14							,"Errore Controllare"
    15							,IIf([Presente]=False And Not IsNull([DaOre]) And IsNull([AOre])
    16								,"Errore Controllare"
    17								,IIf([Presente]=True And IsNull([DaOre]) And Not IsNull([AOre])
    18									,"Inserire Orario Inizio Turno"
    19									)
    20								)
    21							)
    22						)
    23					)
    24				)
    25			)
    26		)
    27	) AS Turno
    manca sicuramente "la parte false" dell'ultimo iif
    ho tralasciato di analizzare (per ora) ottimizzazione di tutte quelle condizioni nidificate ...


    EDIT:
    ho analizzato un'attimo gli iif nidificati e:
    1) la riga 3 e 7 sono una la ripetizione dell'altra
    2) le condizioni alle righe 11,13 e 15 possono facilmente essere raggruppate in un'unica condizione
    codice:
    IIf(not [Presente] And not(IsNull([DaOre]) and IsNull([AOre]))
    3) (cosa più importante) ripeti per ogni iif l'analisi del campo presente, ti basta metterlo in un iif iniziale e non controllarlo +

    EDIT 2:
    poi ci sono altri errori... ad esempio nel secondo SQL raggruppi inutilmente 2 volte per il campo T_User.PosNr
    Ultima modifica di muttley005; 14-02-2018 11:23 

  3. #3
    Falco69 non è in linea Scolaretto
    Post
    200
    Ciao.
    Intanto grazie del tuo tempo.
    1) doveva essere Not IsNull([AOre]) - thanks 1000-
    2)IIf(([Presente]=False And Not IsNull([DaOre]) And Not IsNull([AOre])) or ([Presente]=False And IsNull([DaOre]) And Not IsNull([AOre])) or ([Presente]=False And Not IsNull([DaOre]) And IsNull([AOre])) - Va bene così?
    3) capito quello che intendi adesso provo a svilupparlo. (devo capire bene come farlo in query su una maschera mi viene più facile () ma questo è un mio problema.

    Thanks

    Un ultima cosa... se posso... pensi che sia dovuto a questo?

  4. #4
    Falco69 non è in linea Scolaretto
    Post
    200
    Quote Originariamente inviato da muttley005 Visualizza il messaggio
    dunque, analizzando solo l'iif della prima, che indento per comodità:
    EDIT 2:
    poi ci sono altri errori... ad esempio nel secondo SQL raggruppi inutilmente 2 volte per il campo T_User.PosNr
    si di quello mi sono accorto dopo averlo postato

  5. #5
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,756
    1) ok ma quella ce l'hai già alla riga 17 ...
    2) no, non ti piaceva la mia? e comunque anche nella mia (che era solo per farti capire) dovresti eliminare il controllo sul PRESENTE che va fatto a monte

  6. #6
    Falco69 non è in linea Scolaretto
    Post
    200
    Scusa non avevo visto che avevi postato già il codice
    IIf(not [Presente] And not(IsNull([DaOre]) and IsNull([AOre]))


  7. #7
    Falco69 non è in linea Scolaretto
    Post
    200
    Quote Originariamente inviato da muttley005 Visualizza il messaggio
    1) ok ma quella ce l'hai già alla riga 17 ...
    2) no, non ti piaceva la mia? e comunque anche nella mia (che era solo per farti capire) dovresti eliminare il controllo sul PRESENTE che va fatto a monte
    scusami ancora

    adesso vedo come fare per controllare a monte [Presente]

    codice:
    TRANSFORM IIf([Presente]=False And IsNull([DaOre]) And IsNull([AOre]),[Tipo],IIf([Presente]=True And IsNull([DaOre]) And IsNull([AOre]),"Inserire orario",IIf([Presente]=True And Not IsNull([DaOre]) And IsNull([AOre]),"Inserire Orario Fine Turno",IIf([Presente]=True And IsNull([DaOre]) And Not IsNull([AOre]),"Inserire Orario Inizio Turno",IIf([Presente]=True And Not IsNull([DaOre]) And Not IsNull([AOre]),[DaOre] & "/" & [AOre],IIf(Not [Presente] And Not (IsNull([DaOre]) And IsNull([AOre])),"Errore Controllare")))))) AS Turno
    SELECT T_User.PosNr, [Cognome] & " " & [Nome] & " " & [Grado] AS UserE
    FROM T_User INNER JOIN T_UserTurni ON T_User.IDUser = T_UserTurni.IDUser
    GROUP BY T_User.Cognome, T_User.Grado, T_User.Nome, T_User.PosNr, T_UserTurni.Tipo, T_UserTurni.Presente, T_UserTurni.DaOre, T_UserTurni.AOre
    ORDER BY T_User.PosNr
    PIVOT T_UserTurni.Data;

  8. #8
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,756
    non mi pare difficile:
    codice:
    iif(presente; altri iif se è presente; altri iif se non è presente)
    così non lo controlli ad ogni iif

    poi secondo me dovresti ricontrollare il group by

  9. #9
    Falco69 non è in linea Scolaretto
    Post
    200
    Quote Originariamente inviato da muttley005 Visualizza il messaggio
    non mi pare difficile:
    codice:
    iif(presente; altri iif se è presente; altri iif se non è presente)
    così non lo controlli ad ogni iif

    poi secondo me dovresti ricontrollare il group by
    sicuramente per te... io sto un pò.... (moooolto) più giù
    codice:
    Turno: IIf([Presente];(IsNull([DaOre]) And IsNull([AOre]);"Inserire orario") Or (IsNull([DaOre]) And Not IsNull([AOre]);"Inserire Orario Inizio Turno") Or (Not IsNull([DaOre]) And Not IsNull([AOre]);[DaOre] & "/" & [AOre]);(Not (IsNull([DaOre]) And IsNull([AOre]));"Errore Controllare") Or (IsNull([DaOre]) And IsNull([AOre]);[Tipo]))
    quando provo ad eseguirla mi da errore di sintassi. provo a restringerla con una sola dicitura di errore...

  10. #10
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,756
    si ok, non voleva essere offensiva la mia frase, era nel senso:
    "hai già scritto degli iif ... scrivilo allo stesso modo"

    certo ... mancano gli iif, mancano le parti "false" ... ritenta
    (ti prego indenta il codice)

+ Rispondi al Thread
Pagina 1 di 3 123 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi