I will try to explain my question.
My table structure:
name Code_1 Code_1_value Code_2 Code_2_value Code_3 Code_3_value
N1 ABC1 10 ABC2 15 ABC3 6
N2 ABC1 3 NULL NULL BAA1 10
N3 ABC4 5 ABC2 11 ADC3 6
and I would like to convert this values into new format:
name code value
N1 ABC1 10
N1 ABC2 15
N1 ABC3 6
N2 ABC1 3
I don't know how logically should be (pivot?)
Query -
DECLARE @t TABLE (
name VARCHAR(50) PRIMARY KEY,
Code_1 VARCHAR(50),
Code_1_value INT,
Code_2 VARCHAR(50),
Code_2_value INT,
Code_3 VARCHAR(50),
Code_3_value INT
)
INSERT INTO @t
VALUES
('N1', 'ABC1', 10, 'ABC2', 15 , 'ABC3', 6),
('N2', 'ABC1', 3 , NULL, NULL, 'BAA1', 10),
('N3', 'ABC4', 5 , 'ABC2', 11 , 'ADC3', 6)
SELECT name, code, value
FROM @t
CROSS APPLY (
VALUES (Code_1, Code_1_value), (Code_2, Code_2_value), (Code_3, Code_3_value)
) t2 (code, value)
WHERE code IS NOT NULL
Output -
name code value
-------- -------- -----------
N1 ABC1 10
N1 ABC2 15
N1 ABC3 6
N2 ABC1 3
N2 BAA1 10
N3 ABC4 5
N3 ABC2 11
N3 ADC3 6
Post about UNPIVOT
-
http://blog.devart.com/is-unpivot-the-best-way-for-converting-columns-into-rows.html