Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Query SQL server 2005
venerdì 24 febbraio 2012 - 13.02
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
angeloswan
Profilo
| Newbie
6
messaggi | Data Invio:
ven 24 feb 2012 - 13:02
Qualcuno mi può aiutare?
Ho 3 tabelle: PERSONE , ORE_LAVORATE, ORE_NON_LAVORATE che hanno in comune la PERSONA
Vorrei ottenere una tabella con:
PERSONE.NOME, ORE_LAV.DATA, ORE_LAV.ORE,ORE_NON_LAV.DATA,ORE_NON_LAV.ORE
Mi sto incartando e non ci riesco: mi potete aiutare?
CorriCorrado
Profilo
| Junior Member
86
messaggi | Data Invio:
ven 24 feb 2012 - 15:09
Ciao,
scusa se mi permetto, ma quale è il problema? Non riesci a costruire la query o non ti torna il risultato?
Nel secondo caso hai impostato le chiavi per i record? Ossia, hai un campo identificatore univoco per la persona?
Facci sapere
Corrado
angeloswan
Profilo
| Newbie
6
messaggi | Data Invio:
ven 24 feb 2012 - 15:13
Intanto ti ringrazio per avermi risposto.
Ho fatto il join, ma avendo le tabelle delle date diverse (normalmente la data di lavoro non è la data del non lavoro), mi restituisce dei valori errati nella colonna ore_non_lav.
Mi sono incartato e non riesco ad uscirne
Grazie
CorriCorrado
Profilo
| Junior Member
86
messaggi | Data Invio:
ven 24 feb 2012 - 15:30
Secondo me puoi rivedere il concetto del DB, ossia:
una volta che hai le ore lavorate, puoi ottenere semplicemente le ore non lavorate come differenza tra le ore a budget o il monte ore teorico.
Ti chiedo cmq di riportare qui la struttura tabelle e la query che hai fatto, altrimenti diventa difficile.
Corrado
angeloswan
Profilo
| Newbie
6
messaggi | Data Invio:
ven 24 feb 2012 - 15:37
SELECT DISTINCT
R5BOOKEDHOURS.BOO_DATE, R5BOOKEDHOURS.BOO_PERSON, R5BOOKEDHOURS.BOO_HOURS, R5EXCEPTIONS.EXC_DATE,
R5EXCEPTIONS.EXC_HOURS, R5EXCEPTIONS.EXC_COMMENT
FROM R5BOOKEDHOURS INNER JOIN
R5EXCEPTIONS ON R5BOOKEDHOURS.BOO_PERSON = R5EXCEPTIONS.EXC_PERSON
WHERE (R5BOOKEDHOURS.BOO_DATE = '2012-02-21') AND (R5EXCEPTIONS.EXC_DATE = '2012-02-21')
data Persona ORE_LAV GIORNO ORE_NON_LAV MOTIVO
2012-02-21 00:00:00.000 MALAGUTTI 0,500000 2012-02-21 00:00:00.000 1,000000 ASSEMBLEA
2012-02-21 00:00:00.000 MALAGUTTI 1,500000 2012-02-21 00:00:00.000 1,000000 ASSEMBLEA
2012-02-21 00:00:00.000 MALAGUTTI 2,000000 2012-02-21 00:00:00.000 1,000000 ASSEMBLEA
2012-02-21 00:00:00.000 MINGHINI 1,000000 2012-02-21 00:00:00.000 1,450000 permesso sindacale
2012-02-21 00:00:00.000 MINGHINI 1,500000 2012-02-21 00:00:00.000 1,450000 permesso sindacale
2012-02-21 00:00:00.000 RAPPA 0,500000 2012-02-21 00:00:00.000 1,000000 ASSEMBLEA
2012-02-21 00:00:00.000 RAPPA 1,000000 2012-02-21 00:00:00.000 1,000000 ASSEMBLEA
Come puoi vedere mi ripete i records delle ore_non_lav mentre le ore_lav vanno bene
Grazie
CorriCorrado
Profilo
| Junior Member
86
messaggi | Data Invio:
ven 24 feb 2012 - 15:58
Spero di aver capito il problema.
Da quello che leggo vedo un paio di problemi nel tipo di query che stai costruendo e nelle informazione linkate.
Partiamo dalle chiavi; hai unito le tabelle con il campo PERSON che credo sia il cognome; se così fosse e hai due diverse persone con il cognome MALAGUTTI la tua query sommerà i due MALAGUTTI come se fossero una persona sola.
Secondo, hai fatto un select distinct per sapere cosa fa MALAGUTTI il 21 Febbraio unito alle ore non lavorate. Se MALAGUTTI nella tabella BOOKED HOURS ha 3 record: 0.5/1.5/2 la SELECT DISTINCT ti fa vedere 3 record; se la unisci alle ore non lavorate, dove c'è solo 1 record, otterrai la replica dei record.
La query che devi fare secondo me è una query di calcolo; quindi seleziona RAGGRUPPAMENTO e metti nel campo R5BOOKEDHOURS.BOO_HOURS (sum); a quel punto avrai il totale delle ore lavorate.
Se invece necessiti di avere la lista del dettaglio, non dovrai fare una query SELECT DISTINCT con il JOIN delle due tabelle, ma una query UNION. Quindi costruisci la prima query che ti da le ore lavorate e unisci il risultato alle ore non lavorate.
Corrado
angeloswan
Profilo
| Newbie
6
messaggi | Data Invio:
ven 24 feb 2012 - 16:19
ho provato, ma il sum non fa altro che sommare i numeri riportati, i quali sono ripetuti.
Mi puoi spiegare meglio la UNION che ho provato ieri, ma lui a parità di campi "unisce" i rispettivi valori.
La qualcosa potrebbe funzionare se prima unisco le date e poi uso nella chiave la combinazione Persona e data (?)
Ciao
CorriCorrado
Profilo
| Junior Member
86
messaggi | Data Invio:
ven 24 feb 2012 - 16:44
Unione:
SELECT (DISTINCT solo se necessario)
R5BOOKEDHOURS.BOO_DATE AS 'DATA',
R5BOOKEDHOURS.BOO_PERSON AS 'PERSONA',
R5BOOKEDHOURS.BOO_HOURS 'ORE LAVORATE,
'' AS 'ORE NON LAVORATE',
'' AS COMMENT
FROM
R5BOOKEDHOURS
WHERE (R5BOOKEDHOURS.BOO_DATE = '2012-02-21')
UNION
SELECT DISTINCT
R5EXCEPTIONS.EXC_DATE AS 'DATA',
R5EXCEPTIONS.EXC_PERSON AS 'PERSONA',
'' AS 'ORE LAVORATE',
R5EXCEPTIONS.EXC_HOURSAS 'ORE NON LAVORATE',
R5EXCEPTIONS.EXC_COMMENT
AS COMMENT
FROM
R5EXCEPTIONS
WHERE R5EXCEPTIONS.EXC_DATE = '2012-02-21'
Le colonne devo essere identiche, altrimenti non gira; praticamente unisce i risultati della prima query con quelli della seconda; avrai colonna ORE LAVORATE vuote se non ha lavorato, e viceversa. Nel caso volessi avere tutto su una colonna devi usare una colonna con alias ORE per entrambi.
Se hai dubbi chiedi
Corrado
angeloswan
Profilo
| Newbie
6
messaggi | Data Invio:
ven 24 feb 2012 - 16:52
Grazie infinite! ci lavoro e ti dico
angeloswan
Profilo
| Newbie
6
messaggi | Data Invio:
ven 24 feb 2012 - 18:12
ce l'ho fatta! Ti devo ringraziare ... Se passi da bologna il caffè è garantito.
Grazie
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !