Torna al Thread
USE tempdb;
CREATE TABLE dbo.persNNAppMovCtra(
nnr_numcontr int NOT NULL,
nnr_rinnid int NOT NULL,
nnr_codart varchar(18) NOT NULL,
pnr_codtchi smallint NULL);
CREATE TABLE dbo.persContrattiXChiamate(
nnr_numcontr int NOT NULL,
nnr_rinnid int NOT NULL,
nnr_codart varchar(18) NULL,
pnr_codtchi smallint NULL,
nnr_codart2 varchar(18) NULL,
pnr_codtchi2 smallint NULL,
nnr_codart3 varchar(18) NULL,
pnr_codtchi3 smallint NULL,
nnr_codart4 varchar(18) NULL,
pnr_codtchi4 smallint NULL
);
INSERT dbo.persNNAppMovCtra VALUES(1, 1, 'P010', 10);
INSERT dbo.persNNAppMovCtra VALUES(1, 1, 'P020', 15);
INSERT dbo.persNNAppMovCtra VALUES(1, 1, 'P030', 20);
INSERT dbo.persNNAppMovCtra VALUES(1, 1, 'P032', 10);
INSERT dbo.persNNAppMovCtra VALUES(1, 2, 'P035', 500);
INSERT dbo.persNNAppMovCtra VALUES(2, 1, 'P012', 25);
INSERT dbo.persNNAppMovCtra VALUES(2, 1, 'P020', 20);
INSERT dbo.persNNAppMovCtra VALUES(2, 1, 'P032', 15);
WITH CTE_Data AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY nnr_numcontr, nnr_rinnid ORDER BY nnr_numcontr) AS Col
FROM dbo.persNNAppMovCtra
)
INSERT dbo.persContrattiXChiamate
SELECT
nnr_numcontr
, nnr_rinnid
, MAX(CASE Col
WHEN 1 THEN nnr_codart
ELSE NULL
END) AS C1
, MAX(CASE Col
WHEN 1 THEN pnr_codtchi
ELSE NULL
END) AS C2
, MAX(CASE Col
WHEN 2 THEN nnr_codart
ELSE NULL
END) AS C3
, MAX(CASE Col
WHEN 2 THEN pnr_codtchi
ELSE NULL
END) AS C4
, MAX(CASE Col
WHEN 3 THEN nnr_codart
ELSE NULL
END) AS C5
, MAX(CASE Col
WHEN 3 THEN pnr_codtchi
ELSE NULL
END) AS C6
, MAX(CASE Col
WHEN 4 THEN nnr_codart
ELSE NULL
END) AS C7
, MAX(CASE Col
WHEN 4 THEN pnr_codtchi
ELSE NULL
END) AS C8
FROM CTE_Data
GROUP BY nnr_numcontr, nnr_rinnid
ORDER BY nnr_numcontr, nnr_rinnid;
SELECT *
FROM dbo.persContrattiXChiamate;
/* Output:
nnr_numcontr nnr_rinnid nnr_codart pnr_codtchi nnr_codart2 pnr_codtchi2 nnr_codart3 pnr_codtchi3 nnr_codart4 pnr_codtchi4
------------ ----------- ------------------ ----------- ------------------ ------------ ------------------ ------------ ------------------ ------------
1 1 P010 10 P020 15 P030 20 P032 10
1 2 P035 500 NULL NULL NULL NULL NULL NULL
2 1 P012 25 P020 20 P032 15 NULL NULL
(3 row(s) affected)
*/
DROP TABLE dbo.persNNAppMovCtra, dbo.persContrattiXChiamate;