Newsgroup: it.comp.appl.access
Titolo: SubQuery SQL. Trovare data presente una sola volta per ID=ID

Access 2003/2010
 
 
Ciao, con la presente query non riesco a estrapolare contando le date che 
per ogni singola persona [Id_Mil] si presentano una sola volta. In sostanza, 
in una form continua tra i diversi dati presenti ci sono un campo [data] 
relativo al giorno del mese e un campo [DataRec] che viene riempito nel caso 
il giorno sia da recuperare (es. perchè festivo). Quindi avremmo [Data] e 
[DataRec] con la medesima data. Più avanti nel tempo quando si deciderà di 
recuperare il giorno lavorato si dovrà inserire  in [DataRec] la data del gg 
da recuperare, pertanto avremmo [Data] <> da [DataRec]. per terminare. 
Quando vengono trovate due date uguali in DataRec per ogni soggetto 
([tbl_141_Servizi].[Id_Mil]=[tbl_141_Servizi].[Id_Mil]) allora non viene 
estratto dalla query, diversamente viene estratto il giorno e il soggetto. 
[Id_Mil] e di tipo integer.
 
Grazie per l'aiuto
 
 
SQL Query completa:
 
SELECT tbl_141_Servizi.Anno, tbl_141_Servizi.Mese, tbl_141_Servizi.Id_Mil, 
tbl_141_Servizi.Militare, tbl_141_Servizi.Data, tbl_141_Servizi.DataRec, 
tbl_141_Turni.TurnoName
 
FROM tbl_141_Servizi INNER JOIN tbl_141_Turni ON tbl_141_Servizi.Turno = 
tbl_141_Turni.Id_Turno
 
WHERE (((tbl_141_Servizi.DataRec) In (SELECT [DataRec] FROM 
[tbl_141_Servizi] As Tmp GROUP BY [DataRec] HAVING Count(*)=1 And 
[tbl_141_Servizi].[Id_Mil]=[tbl_141_Servizi].[Id_Mil])))
 
ORDER BY tbl_141_Servizi.Data, tbl_141_Servizi.DataRec;
 
 
 
 SubQuery nei criteri del campo DataRec (Data recupero giorno)
 
In (SELECT [DataRec] FROM [tbl_141_Servizi] As Tmp GROUP BY [DataRec] HAVING 
Count(*)=1 And [tbl_141_Servizi].[Id_Mil]=[tbl_141_Servizi].[Id_Mil])
 
 

 ...
 
Speriamo che si trovi qualcuno chi capisce cosa vuoi ottenere. ;-)
Da me solo un'indicazione tecnica:
 
Nella sottoquery hai un paragone insensato con due volte
il campo identico:
[tbl_141_Servizi].[Id_Mil]=[tbl_141_Servizi].[Id_Mil]
 
Suppongo che vuoi paragonare con l'Id_Mil della query principale.
In questo caso devi usare dei Alias, che anche rendono
l'enunciato SQL più leggibile:
 
SELECT S.Anno, S.Mese, S.Id_Mil, S.Militare, S.Data, S.DataRec,
  T.TurnoName
 
FROM tbl_141_Servizi As S INNER JOIN tbl_141_Turni AS T
 ON S.Turno = T.Id_Turno
 
WHERE S.DataRec In
(
  SELECT DataRec
  FROM tbl_141_Servizi As Tmp
  GROUP BY DataRec
  HAVING Count(*)=1 And Tmp.Id_Mil=S.Id_Mil
)
 
ORDER BY S.Data, S.DataRec;
 
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it
 
 
 

 ha scritto nel messaggio 
news:b3al6p...@mid.individual.net...

Ciao Karl, grazie per la risposta alla mia richiesta formulata in maniera 
poco chiara. Praticamente ho la necessità di estrapolare lle date del campo 
DataRec per ogni militare, ma solo se sono presenti una sola volta.
 
Credimi, ho cercato di risolvere cercando esempi in rete, ma ho trovato solo 
esempi di confronto senza conteggio dei record come serviva a me. Purtroppo 
per me ho un pocchino di difficoltà.
 
l'SQL che mi hai inviato mi da il seguente errore  lanciando la query:
 
impossibile eseguire una query che non include "Count(*)=1 And 
Tmp.Id_Mil=S.Id_Mil And S.DataRec" specificata come parte di una funzione di 
aggregazione.
 
---------------------------- Ricerca errore help Access---------------
 
      Impossibile eseguire una query che non include l'espressione <nome> 
specificata come parte di una funzione di aggregazione. (Errore 3122)
 
Si è tentato di eseguire una query che non include l'espressione specificata 
come parte di una funzione di aggregazione o di un raggruppamento.
 
Possibile causa:
 
 
  a.. Non è stata immessa una funzione di aggregazione nell'istruzione 
TRANSFORM.
-------------------------
 
Mentre se tolgo la parte seguente mi da tutti i record.
 
DataRec In (SELECT DataRec FROM tbl_141_Servizi As Tmp GROUP BY DataRec 
HAVING Count(*)=1 And Tmp.Id_Mil=S.Id_Mil ORDER BY S.Data, S.DataRec);
 
 
 
Chiaramente non ho idea da dove iniziare a toccare l'sql.
 
Grazie, Bruno
 
 

 ...
 
Ah, certo...
Se ti capisco bene, puoi provare questo:
 
SELECT S.Anno, S.Mese, S.Id_Mil, S.Militare, S.Data, S.DataRec,
  T.TurnoName
FROM
  (tbl_141_Servizi As S INNER JOIN tbl_141_Turni AS T
    ON S.Turno = T.Id_Turno)
  INNER JOIN
    (SELECT Id_Mil, DataRec
     FROM tbl_141_Servizi
     GROUP BY Id_Mil, DataRec
     HAVING Count(*)=1) AS D
  ON S.Id_Mil = D.Id_Mil AND S.DataRec = D.DataRec



--------
Mille Grazie Karl, provo e in prima mattina ti faccio sapere come è andata.
Ancora grazie
Bruno

 ha scritto:

------
 
Grande Karl, il to SQL funziona alla grande. Non ci sarei mai
 riuscito senza il tuo aiuto.
Grazie, Bruno