>Seguono le table di un database di prova (semplificato) che sto
>utilizzando per scrivere la query
Prova a vedere il seguente esempio:
USE tempdb;
SET ANSI_WARNINGS OFF;
CREATE TABLE dbo.VALUTAZIONE1(
IDVALUTAZIONE1 int IDENTITY(1,1) NOT NULL,
IDASSOCIAZIONE int NOT NULL,
CAMPO1 varchar(15) NULL,
CONSTRAINT PK_VALUTAZIONE1 PRIMARY KEY(IDVALUTAZIONE1)
);
CREATE TABLE dbo.VALUTAZIONE2(
IDVALUTAZIONE2 int IDENTITY(1,1) NOT NULL,
IDASSOCIAZIONE int NOT NULL,
CAMPO2 varchar(15) NULL,
CONSTRAINT PK_VALUTAZIONE2 PRIMARY KEY(IDVALUTAZIONE2)
);
CREATE TABLE dbo.VALUTAZIONE3(
IDVALUTAZIONE3 int IDENTITY(1,1) NOT NULL,
IDASSOCIAZIONE int NOT NULL,
CAMPO3 varchar(15) NULL,
CONSTRAINT PK_VALUTAZIONE3 PRIMARY KEY(IDVALUTAZIONE3)
);
INSERT dbo.VALUTAZIONE1 VALUES(1,'VALUTAZIONE1a');
INSERT dbo.VALUTAZIONE2 VALUES(1,'VALUTAZIONE2a');
INSERT dbo.VALUTAZIONE2 VALUES(2,'VALUTAZIONE2b');
INSERT dbo.VALUTAZIONE3 VALUES(3,'VALUTAZIONE3a');
WITH CTE_Associazioni(IDASSOCIAZIONE, CAMPO1, CAMPO2, CAMPO3) AS
(
SELECT
IDASSOCIAZIONE
, CAMPO1
, NULL
, NULL
FROM dbo.VALUTAZIONE1
UNION ALL
SELECT
IDASSOCIAZIONE
, NULL
, CAMPO2
, NULL
FROM dbo.VALUTAZIONE2
UNION ALL
SELECT
IDASSOCIAZIONE
, NULL
, NULL
, CAMPO3
FROM dbo.VALUTAZIONE3
)
SELECT
IDASSOCIAZIONE
, MAX(CAMPO1) AS CAMPO1
, MAX(CAMPO2) AS CAMPO2
, MAX(CAMPO3) AS CAMPO3
FROM CTE_Associazioni
GROUP BY IDASSOCIAZIONE;
/* Output:
IDASSOCIAZIONE CAMPO1 CAMPO2 CAMPO3
-------------- --------------- --------------- ---------------
1 VALUTAZIONE1a VALUTAZIONE2a NULL
2 NULL VALUTAZIONE2b NULL
3 NULL NULL VALUTAZIONE3a
(3 row(s) affected)
*/
DROP TABLE dbo.VALUTAZIONE1, dbo.VALUTAZIONE2, dbo.VALUTAZIONE3;
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org