Salve Nico,
si, hai ragione, la variabile @COLONNA viene usata in 2 punti e in questo caso “non e' corretto” e quindi va gestito diversamente, similarmente a
SET NOCOUNT ON;
GO
USE tempdb;
GO
IF (OBJECT_ID('TStruttura') IS NOT NULL)
DROP TABLE tStruttura;
CREATE TABLE tStruttura (Struttura varchar(10), QPrest int);
INSERT INTO tStruttura VALUES ('C.0', NULL), ('C.1', 1), ('C.2', 1), ('C.2', 1);
DECLARE @SELECT_COLONNA AS nvarchar(MAX) -- PROIEZIONE NELLE COLONNE
DECLARE @COLONNA as nvarchar(max) -- colonna INVIO NELLE COLONNE
declare @Griglia as nvarchar(max)
SELECT @colonna = ISNULL(@COLONNA + ',', '') + QUOTENAME(Struttura)
, @SELECT_COLONNA = ISNULL(@SELECT_COLONNA + ',', '') + 'ISNULL(' + QUOTENAME(Struttura) + ', '''') AS ' + QUOTENAME(Struttura)
FROM
(
SELECT DISTINCT Struttura
FROM tStruttura AS S
WHERE 1 = 1
) AS C -- order by struttura
--SELECT @SELECT_COLONNA ;
SET @Griglia =
'SELECT 1 AS invio, 2 AS catalogo, ''Prestazioni'' as Cliente, '+ @SELECT_COLONNA + '
FROM (
SELECT Struttura, QPrest
FROM tStruttura
WHERE 1 = 1
) AS T
PIVOT
(
SUM(QPrest)
FOR Struttura IN ('+ @COLONNA +')
) AS P -- order by invio,catalogo';
--SELECT @Griglia
EXEC (@Griglia)
– <-----------------------------
invio catalogo Cliente C.0 C.1 C.2
----------- ----------- ----------- ----------- ----------- -----------
1 2 Prestazioni 0 1 2
cosi' dovrebbe andare meglio…
salutoni romagnoli
–
Andrea