Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何改进SAS代码?运行代码要花很多时间_Sql_Sas_Case - Fatal编程技术网

Sql 如何改进SAS代码?运行代码要花很多时间

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

我如何改进这个代码段,因为它只需要花费大量时间来处理7000多个项目。下一步将在300000行上运行此代码

我可以写另一种使代码更快的案例吗

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