Teradata Unpivot

Teradata Unpivot

Un-pivot aka transpose from columns to rows using SQL or UNPIVOT Teradata function.

Data preparation:

CREATE  VOLATILE TABLE product
( 
  id INTEGER,
  name VARCHAR(10),
  depth INTEGER,
  height INTEGER,
  width INTEGER
)
ON COMMIT PRESERVE ROWS;

INSERT INTO product(1,'fridge',55,120,60);
INSERT INTO product(2,'heater',30,35,25);

SELECT * FROM product;
/*
id	name	depth	height	width
2	heater	30	35	25
1	fridge	55	120	60
*/

CREATE VOLATILE TABLE dimensions ( dimension VARCHAR(10))  ON COMMIT PRESERVE ROWS;

INSERT INTO dimensions ('depth');
INSERT INTO dimensions ('height');
INSERT INTO dimensions ('width');

SELECT * FROM dimensions;
/*
dimension
depth
height
width
*/

Solution using SQL

SELECT
  a1.id,
  a1.name,
  a2.dimension,
  CASE a2.dimension
     WHEN 'depth' THEN a1.depth
     WHEN 'height' THEN a1.height
     WHEN 'width' THEN a1.width
  END AS dimension_value
FROM product a1 CROSS JOIN dimensions a2
;
/*
id	name	dimension	dimension_value
1	fridge	depth	55
1	fridge	height	120
1	fridge	width	60
2	heater	depth	30
2	heater	height	35
2	heater	width	25
*/

Solution using Teradata UNPIVOT function

SELECT * FROM TD_UNPIVOT
(
 ON (SELECT * FROM product)
 USING
 VALUE_COLUMNS('dimension_value')
 UNPIVOT_COLUMN('dimension')
 COLUMN_LIST('depth', 'height', 'width')
 COLUMN_ALIAS_LIST('depth', 'height', 'width')
)X
ORDER BY 1,3
;
/*
id	name	dimension	dimension_value
1	fridge	depth	55
1	fridge	height	120
1	fridge	width	60
2	heater	depth	30
2	heater	height	35
2	heater	width	25
*/

Leave a Reply

Your email address will not be published. Required fields are marked *