Sql 如何改进SAS代码?运行代码要花很多时间
我如何改进这个代码段,因为它只需要花费大量时间来处理7000多个项目。下一步将在300000行上运行此代码 我可以写另一种使代码更快的案例吗Sql 如何改进SAS代码?运行代码要花很多时间,sql,sas,case,Sql,Sas,Case,我如何改进这个代码段,因为它只需要花费大量时间来处理7000多个项目。下一步将在300000行上运行此代码 我可以写另一种使代码更快的案例吗 PROC SQL; UPDATE GRV_Export_Dummy D SET 'PAYMENTROLE'n = (CASE WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE
PROC SQL;
UPDATE GRV_Export_Dummy D
SET 'PAYMENTROLE'n =
(CASE
WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
(SELECT 'H02'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
(SELECT 'H03'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
(SELECT 'H04'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
(SELECT 'H05'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' &
(SELECT 'H06'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1'
THEN 'H/'
ELSE ''
END)
||
(CASE
WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
(SELECT 'H02'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
(SELECT 'H03'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
(SELECT 'H04'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
(SELECT 'H05'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1' !
(SELECT 'H06'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) <> '1'
THEN
(CASE WHEN (SELECT 'H01'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H1/' ELSE '' END) ||
(CASE WHEN (SELECT 'H02'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H2/' ELSE '' END) ||
(CASE WHEN (SELECT 'H03'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H3/' ELSE '' END) ||
(CASE WHEN (SELECT 'H04'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H4/' ELSE '' END) ||
(CASE WHEN (SELECT 'H05'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H5/' ELSE '' END) ||
(CASE WHEN (SELECT 'H06'n FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR) = '1' THEN 'H6/' ELSE '' END)
ELSE ''
END)
WHERE D.VTITEM IN (SELECT V.VTGONR FROM SERVER.VIEWTABLE V WHERE D.VTITEM = V.VTGONR);
QUIT;
VTGONR
H01
H02
H03
H04
H05
H06
6123456
1.
0
0
0
0
1.
6135678
1.
1.
1.
1.
1.
1.
5797897
0
0
1.
1.
1.
1.
可能有一种更简单的方法。请发布一些示例输入和输出数据。编辑您的问题并将示例数据作为文本包含在内。请不要发布文本图片。您的表是否位于可通过服务器
库访问的其他数据库上?您是说您的server.VIEWTABLE有7000列(H1到H7000)?尝试查看视图源代码以了解VIEWTABLE是如何构造的,您可能能够利用一个更简单的底层数据结构作为VIEWTABLE的基础(它本身可能是一个包含7000个case语句的非常大的源代码!)我已经在我的文章中添加了更多关于Samples的信息请回答@samkart的上述问题。数据是否来自外部来源?
OUTPUT
SAMPLE 1 --> H1/H6
SAMPLE 2 --> H/
SAMPLE 3 --> H3/H4/H5/H6