Skip to main content
added 38 characters in body
Source Link
McNets
  • 23.9k
  • 11
  • 50
  • 89

Instead of use a CURSOR I'd suggest you to use an iterative solution using WHILE.

CREATE TABLE MEASURES (id int, id_column1 int, id_column2 int, id_column3 int, stuff varchar(20));
INSERT INTO MEASURES VALUES
(1, 2017, 2024, 1452, 'red'),
(2, 4125, NULL, 5234, 'blue'),
(3, NULL, 5234, 7234, 'pink');
GO

3 rows affected

CREATE TABLE BRIDGE (id int, idc int);
GO
DECLARE @idColumn INT = 1;
DECLARE @cmd VARCHAR(MAX) = '';

WHILE @idColumn <= 3
BEGIN
    SET @CMD =   'INSERT INTO BRIDGE'
               + ' SELECT id, id_column' 
               + CAST(@idColumn AS VARCHAR(10))
               + ' FROM MEASURES'
               -- uncomment to remove NULL values
               --+ ' WHERE id_column'
               --+ + CAST(@idColumn AS VARCHAR(10))
               --+ ' IS NOT NULL;';
               
    EXEC (@CMD);
    
    SET @idColumn = @idColumn + 1;
    
    -- uncomment to check SQL statements 
    --SELECT @CMD;
END

SELECT * FROM BRIDGE ORDER BY id;
GO
id |  idc
-: | ---:
 1 | 2017
 1 | 2024
 1 | 1452
 2 | 5234
 2 | null
 2 | 4125
 3 | null
 3 | 5234
 3 | 7234

dbfiddle here

Instead of use a CURSOR I'd suggest you to use an iterative solution using WHILE.

CREATE TABLE MEASURES (id int, id_column1 int, id_column2 int, id_column3 int, stuff varchar(20));
INSERT INTO MEASURES VALUES
(1, 2017, 2024, 1452, 'red'),
(2, 4125, NULL, 5234, 'blue'),
(3, NULL, 5234, 7234, 'pink');
GO

3 rows affected

CREATE TABLE BRIDGE (id int, idc int);
GO
DECLARE @idColumn INT = 1;
DECLARE @cmd VARCHAR(MAX) = '';

WHILE @idColumn <= 3
BEGIN
    SET @CMD =   'INSERT INTO BRIDGE'
               + ' SELECT id, id_column' 
               + CAST(@idColumn AS VARCHAR(10))
               + ' FROM MEASURES'
               --+ ' WHERE id_column'
               --+ + CAST(@idColumn AS VARCHAR(10))
               --+ ' IS NOT NULL;';
               
    EXEC (@CMD);
    
    SET @idColumn = @idColumn + 1;
    
    --SELECT @CMD;
END

SELECT * FROM BRIDGE ORDER BY id;
GO
id |  idc
-: | ---:
 1 | 2017
 1 | 2024
 1 | 1452
 2 | 5234
 2 | null
 2 | 4125
 3 | null
 3 | 5234
 3 | 7234

dbfiddle here

Instead of use a CURSOR I'd suggest you to use an iterative solution using WHILE.

CREATE TABLE MEASURES (id int, id_column1 int, id_column2 int, id_column3 int, stuff varchar(20));
INSERT INTO MEASURES VALUES
(1, 2017, 2024, 1452, 'red'),
(2, 4125, NULL, 5234, 'blue'),
(3, NULL, 5234, 7234, 'pink');
GO
CREATE TABLE BRIDGE (id int, idc int);
GO
DECLARE @idColumn INT = 1;
DECLARE @cmd VARCHAR(MAX) = '';

WHILE @idColumn <= 3
BEGIN
    SET @CMD =   'INSERT INTO BRIDGE'
               + ' SELECT id, id_column' 
               + CAST(@idColumn AS VARCHAR(10))
               + ' FROM MEASURES'
               -- uncomment to remove NULL values
               --+ ' WHERE id_column'
               --+ + CAST(@idColumn AS VARCHAR(10))
               --+ ' IS NOT NULL;';
               
    EXEC (@CMD);
    
    SET @idColumn = @idColumn + 1;
    
    -- uncomment to check SQL statements 
    --SELECT @CMD;
END

SELECT * FROM BRIDGE ORDER BY id;
GO
id |  idc
-: | ---:
 1 | 2017
 1 | 2024
 1 | 1452
 2 | 5234
 2 | null
 2 | 4125
 3 | null
 3 | 5234
 3 | 7234

dbfiddle here

Post Undeleted by McNets
Post Deleted by McNets
Source Link
McNets
  • 23.9k
  • 11
  • 50
  • 89

Instead of use a CURSOR I'd suggest you to use an iterative solution using WHILE.

CREATE TABLE MEASURES (id int, id_column1 int, id_column2 int, id_column3 int, stuff varchar(20));
INSERT INTO MEASURES VALUES
(1, 2017, 2024, 1452, 'red'),
(2, 4125, NULL, 5234, 'blue'),
(3, NULL, 5234, 7234, 'pink');
GO

3 rows affected

CREATE TABLE BRIDGE (id int, idc int);
GO
DECLARE @idColumn INT = 1;
DECLARE @cmd VARCHAR(MAX) = '';

WHILE @idColumn <= 3
BEGIN
    SET @CMD =   'INSERT INTO BRIDGE'
               + ' SELECT id, id_column' 
               + CAST(@idColumn AS VARCHAR(10))
               + ' FROM MEASURES'
               --+ ' WHERE id_column'
               --+ + CAST(@idColumn AS VARCHAR(10))
               --+ ' IS NOT NULL;';
               
    EXEC (@CMD);
    
    SET @idColumn = @idColumn + 1;
    
    --SELECT @CMD;
END

SELECT * FROM BRIDGE ORDER BY id;
GO
id |  idc
-: | ---:
 1 | 2017
 1 | 2024
 1 | 1452
 2 | 5234
 2 | null
 2 | 4125
 3 | null
 3 | 5234
 3 | 7234

dbfiddle here