>Io ho bisogno di creare una query che, controllate entrambe le
>tabelle, mi estragga per lo specifico paziente, il massimo valore
>di N_SESSIONE disponibile.
Ciao,
Potresti risolvere con l'operatore UNION che esegue l'unione di due result set ed eseguendo l'aggregazione sul result set risultante.
Ti allego uno script in T-SQL per SQL Server ma troverai anche una soluzione compatibile con JET (il motore relazionale utilizzato da Access):
USE tempdb;
CREATE TABLE dbo.Sessioni(
ID_PAZIENTE int NOT NULL,
N_SESSIONE int NOT NULL
);
CREATE TABLE dbo.Sessioni_interrotte(
ID_PAZIENTE int NOT NULL,
N_SESSIONE int NOT NULL
);
INSERT dbo.Sessioni
VALUES (1, 10), (2, 20), (3, 30);
INSERT dbo.Sessioni_interrotte
VALUES (1, 100), (2, 15), (3, 30), (4, 40);
/* Soluzione per SQL Server 2005+ basata su una CTE */
WITH CTE_Sessioni AS
(
SELECT ID_PAZIENTE, N_SESSIONE
FROM dbo.Sessioni
UNION
SELECT ID_PAZIENTE, N_SESSIONE
FROM dbo.Sessioni_interrotte
)
SELECT ID_PAZIENTE, MAX(N_SESSIONE) AS SessioneMassima
FROM CTE_Sessioni
GROUP BY ID_PAZIENTE;
/* Soluzione compatibile con JET basata su una
tabella derivata
*/
SELECT ID_PAZIENTE, MAX(N_SESSIONE) AS SessioneMassima
FROM (
SELECT ID_PAZIENTE, N_SESSIONE
FROM dbo.Sessioni
UNION
SELECT ID_PAZIENTE, N_SESSIONE
FROM dbo.Sessioni_interrotte
) AS Q
GROUP BY ID_PAZIENTE;
/* Output:
ID_PAZIENTE SessioneMassima
----------- ---------------
1 100
2 20
3 30
4 40
(4 row(s) affected)
*/
DROP TABLE dbo.Sessioni, dbo.Sessioni_interrotte;
>Grazie sin d'ora!
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/