How can I Convert Rows to Columns in SQL.
I would like to transform the data from rows to columns.
10 rows in 10 fileds as one record per ID/seq
ID Seq I
O35018 1 221
O35018 2 239
O35018 3 213
O35018 4 195
O35018 5 228
O35018 6 216
O35018 7 209
O35018 8 183
O35018 9 205
O35018 10 187
O35018 11 211
O35018 12 161
O35018 13 163
like:
ID Seq I1 I2 I3 I4 I5 I6 I7 I8 I9 I10
O35018 1 221 239 213 195 228 216 209 183 205 187
O35018 2 211 161 163 188 186 162 178 161 171 176
O35018 3 165 172 150 152 143 153 143 142 132 144
CREATE TABLE T1 (
ID VARCHAR(10),
SEQ INTEGER,
I INTEGER
);
INSERT INTO T1 VALUES
('O35018', 1, 221),
('O35018', 2, 239),
('O35018', 3, 213),
('O35018', 4, 195),
('O35018', 5, 228),
('O35018', 6, 216),
('O35018', 7, 209),
('O35018', 8, 183),
('O35018', 9, 205),
('O35018', 10, 187),
('O35018', 11, 211),
('O35018', 12, 161),
('O35018', 13, 163),
('O35018', 14, 188),
('O35018', 15, 186),
('O35018', 16, 162),
('O35018', 17, 178),
('O35018', 18, 161),
('O35018', 19, 171),
('O35018', 20, 176),
('O35018', 21, 165),
('O35018', 22, 172),
('O35018', 23, 150),
('O35018', 24, 152),
('O35018', 25, 143),
('O35018', 26, 153),
('O35018', 27, 143),
('O35018', 28, 142),
('O35018', 29, 132),
('O35018', 30, 144);
SELECT ID,
CEILING((SEQ - 1) / 10) + 1 AS SEQ,
SUM(CASE (SEQ - 1) % 10 WHEN 0 THEN I ELSE 0 END) AS I1,
SUM(CASE (SEQ - 1) % 10 WHEN 1 THEN I ELSE 0 END) AS I2,
SUM(CASE (SEQ - 1) % 10 WHEN 2 THEN I ELSE 0 END) AS I3,
SUM(CASE (SEQ - 1) % 10 WHEN 3 THEN I ELSE 0 END) AS I4,
SUM(CASE (SEQ - 1) % 10 WHEN 4 THEN I ELSE 0 END) AS I5,
SUM(CASE (SEQ - 1) % 10 WHEN 5 THEN I ELSE 0 END) AS I6,
SUM(CASE (SEQ - 1) % 10 WHEN 6 THEN I ELSE 0 END) AS I7,
SUM(CASE (SEQ - 1) % 10 WHEN 7 THEN I ELSE 0 END) AS I8,
SUM(CASE (SEQ - 1) % 10 WHEN 8 THEN I ELSE 0 END) AS I9,
SUM(CASE (SEQ - 1) % 10 WHEN 9 THEN I ELSE 0 END) AS I10
FROM T1
GROUP BY ID, CEILING((SEQ - 1) / 10) + 1;
SELECT ID,
CEILING((SEQ - 1) / 10) + 1 AS SEQ,
SUM(CASE (SEQ - 1) % 10 WHEN 0 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I1,
SUM(CASE (SEQ - 1) % 10 WHEN 1 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I2,
SUM(CASE (SEQ - 1) % 10 WHEN 2 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I3,
SUM(CASE (SEQ - 1) % 10 WHEN 3 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I4,
SUM(CASE (SEQ - 1) % 10 WHEN 4 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I5,
SUM(CASE (SEQ - 1) % 10 WHEN 5 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I6,
SUM(CASE (SEQ - 1) % 10 WHEN 6 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I7,
SUM(CASE (SEQ - 1) % 10 WHEN 7 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I8,
SUM(CASE (SEQ - 1) % 10 WHEN 8 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I9,
SUM(CASE (SEQ - 1) % 10 WHEN 9 THEN cast(I as decimal(15, 7)) ELSE 0.0 END) AS I10
FROM T1
GROUP BY ID, CEILING((SEQ - 1) / 10) + 1;
Open in new window