
Create table Product_transpose as (
SELECT Product, Large,Small,Medium FROM (
SELECT Product,
MAX(CASE WHEN Product_Type = 'Large' THEN Unit_Price END) AS Large,
MAX(CASE WHEN Product_Type = 'Small' THEN Unit_Price END) AS Small,
MAX(CASE WHEN Product_Type = 'Medium' THEN Unit_Price END) AS Medium
From Product_data
Group By Product ))
SELECT string_agg(PRODUCT_TYPE, ', ')
INTO ProductTypeList
FROM (SELECT DISTINCT PRODUCT_TYPE from PRODUCT_DATA as b);
DynamicSQL := 'Create table Product_transpose as (
SELECT PRODUCT, ' || ProductTypeList || ' FROM (
SELECT PRODUCT,
';
SELECT
STRING_AGG('MAX(CASE WHEN PRODUCT_TYPE = ''' || PRODUCT_TYPE || ''' THEN
Unit_Price END) AS ' || PRODUCT_TYPE, ', ')
INTO ColumnExpressions
FROM (SELECT DISTINCT PRODUCT_TYPE FROM Product_data);
DynamicSQL := DynamicSQL || ColumnExpressions ||
' FROM Product_data GROUP BY PRODUCT))';
EXEC DynamicSQL;
CALL "MYSCHEMA"."MYPACKAGE::product_transpose" ( ) ;
PROCEDURE "MYSCHEMA"."MYPACKAGE::product_transpose" ( )
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
--READS SQL DATA
AS
BEGIN
DECLARE ProductTypeList NVARCHAR(10000);
DECLARE DynamicSQL NVARCHAR(60000);
DECLARE ColumnExpressions NVARCHAR(50000);
SELECT string_agg(PRODUCT_TYPE, ', ')
INTO ProductTypeList
FROM (SELECT DISTINCT PRODUCT_TYPE from PRODUCT_DATA as b);
DynamicSQL := 'Create table Product_Transpose as (
SELECT PRODUCT, ' || ProductTypeList || '
FROM (
SELECT PRODUCT,
';
SELECT STRING_AGG('MAX(CASE WHEN PRODUCT_TYPE = ''' || PRODUCT_TYPE || '''
THEN UNIT_PRICE END) AS ' || PRODUCT_TYPE, ', ')
INTO ColumnExpressions
FROM (SELECT DISTINCT PRODUCT_TYPE FROM PRODUCT_DATA);
DynamicSQL := DynamicSQL || ColumnExpressions || ' FROM PRODUCT_DATA
GROUP BY PRODUCT))';
EXEC DynamicSQL;
END;
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
7 | |
7 | |
6 | |
5 | |
5 | |
5 | |
5 | |
5 | |
4 |