2020-09-12 07:36发布
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我试图创建一个过程,该过... 显示全部
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好
我试图创建一个过程,该过程将接收一个表,然后根据它将接收的值将行转置为列。 我设法实现了这一点,但是由于大量的值(=列),执行该过程几乎需要10分钟。
除了使用解析视图(不能随列名或要传输的值的数目/名称动态变化)外,任何人都可以提出一种更快的方法来实现它。 真可悲的是,几年前,其他数据库已经实现了这一简单的练习。
谢谢。
您好,
谢谢你们的回答,我设法创建了一个可以运行几秒钟的proc,
创建过程PIVOT_TABLE(IN SCHEMA_NAME VARCHAR(100),IN TABLE_NAME VARCHAR(100)) 语言SQLSCRIPT 如 开始 -------------------------------------------------- ------------------------------------------- -在同一模式下从插入的PIVOT_#TABLE_NAME_INSERTED中创建PIVOT表- -仅适用于一公制 -------------------------------------------------- -------------------------------------------- DECLARE v_count INT默认值1; 宣告STEP0 VARCHAR(100000)默认''; 声明STEP1 VARCHAR(100000)默认值''; 声明STEP4 VARCHAR(100); 声明STEP5 VARCHAR(1000)默认值''; 声明STEP6 VARCHAR(1000000)默认值''; 声明STEP7 VARCHAR(1000); 十进制rn_ INTEGER; 声明IN_SCHEMA_NAME VARCHAR(100):=:SCHEMA_NAME; 声明IN_TABLE_NAME VARCHAR(100):=:TABLE_NAME; exec'设置架构'||:IN_SCHEMA_NAME; 创建表" VARIABLE _"(RN2 INTEGER,VARIABLE INTEGER); 删除表" VARIABLE_"; 创建表" rn _"(rn_ INTEGER); 从"" ||:IN_TABLE_NAME ||'";中选择'INSERT INTO" rn_" SELECT COUNT(DISTINCT"'||列名||'")) 进入step4 来自TABLE_COLUMNS 其中TABLE_NAME =:IN_TABLE_NAME AND SCHEMA_NAME =:IN_SCHEMA_NAME 和位置= 2; 执行:STEP4; 选择rn_ INTO rn_ 来自" rn_"; 选择 '创建列表变量_ AS(选择row_number()over(按'|| (从TABLE_COLUMNS中选择'"'||| column_name ||'"'' SCHEMA_NAME =:IN_SCHEMA_NAME AND TABLE_NAME =:IN_TABLE_NAME并且位置= 2)||')AS" RN2", "'||(从TABLE_COLUMNS中选择column_name SCHEMA_NAME =:IN_SCHEMA_NAME AND TABLE_NAME =:IN_TABLE_NAME并且位置= 2)||'"作为"变量",来自( SELECT DISTINCT"'||(从TABLE_COLUMNS中选择column_name SCHEMA_NAME =:IN_SCHEMA_NAME AND TABLE_NAME =:IN_TABLE_NAME并且位置= 2)||'"" FROM"'||:IN_SCHEMA_NAME ||'"。" || :: IN_TABLE_NAME ||'")));' 进入STEP5 来自DUMMY; EXEC:STEP5; 当rn_> =:V_COUNT DO 选择 ',MAX(当RN2 ='||:v_count ||'THEN"'||(SELECT COLUMN_NAME FROM( 选择POSITION,column_name,MAX(position)OVER()AS XX 来自table_COLUMNS 其中TABLE_NAME =:IN_TABLE_NAME和SCHEMA_NAME =:IN_SCHEMA_NAME )WHERE XX = POSITION)||''" END)AS"'|| (从" VARIABLE_"中选择VARIABLE,其中rn2 =:v_count) ||'" ' 进入STEP0 从假人 STEP1:= STEP1 |||:STEP0; v_count:= v_count +1; 结束 SELECT'CREATE COLUMN TABLE TARGET_ AS(SELECT"'||( 从table_COLUMNS中选择" COLUMN_NAME" 其中TABLE_NAME =:IN_TABLE_NAME AND SCHEMA_NAME =:IN_SCHEMA_NAME AND POSITION = 1 )||'"'||:STEP1 ||'FROM( SELECT A。*,ROW_NUMBER()OVER(PARTITION BY"'|| (从table_COLUMNS中选择" COLUMN_NAME" 其中TABLE_NAME =:IN_TABLE_NAME AND SCHEMA_NAME =:IN_SCHEMA_NAME AND POSITION = 1)||'"" ORDER BY"'|| (从table_COLUMNS中选择" COLUMN_NAME" 其中TABLE_NAME =:IN_TABLE_NAME AND POSITION = 2) ||''))AS" RN2",来自"'||:IN_SCHEMA_NAME ||'"。"'||:IN_TABLE_NAME ||'" A ) GROUP BY"'|| ( 从table_COLUMNS中选择" COLUMN_NAME" 其中TABLE_NAME =:IN_TABLE_NAME AND SCHEMA_NAME =:IN_SCHEMA_NAME AND POSITION = 1 )||'");' 进入STEP6 来自DUMMY; 执行:STEP6; exec'设置架构'||:IN_SCHEMA_NAME; 删除表" VARIABLE_"; DROP表" rn_"; 结束;
再次感谢您的宝贵时间。
最多设置5个标签!
您好,
谢谢你们的回答,我设法创建了一个可以运行几秒钟的proc,
再次感谢您的宝贵时间。
一周热门 更多>