Является ли это эквивалентом SELECT * INTO SQL Server в HANA? - PullRequest
0 голосов
/ 04 июля 2019

Я сейчас нахожусь в процессе преобразования части кода SQL нашей компании в HANA, и я наткнулся на стену. Это мой пример кода SQL:

SQL

select
    level1.acctcode as 'acctcode1', level1.acctname as 'acctname1',
    level1.fathernum as 'fathernum1', level1.FormatCode as 'formatcode1', 
    level1.Levels as Level1,
    level2.acctcode as 'acctcode2', level2.acctname as 'acctname2',
    level2.fathernum as 'fathernum2', level2.FormatCode as 'formatcode2', 
    level2.Levels as Level2,
    level3.acctcode as 'acctcode3', level3.acctname as 'acctname3',
    level3.fathernum as 'fathernum3', level3.FormatCode as 'formatcode3', 
    level3.Levels as Level3,
    level4.acctcode as 'acctcode4', level4.acctname as 'acctname4',
    level4.fathernum as 'fathernum4', level4.FormatCode as 'formatcode4', 
    level4.Levels as Level4,
    -- ..... and so on for several more groups of columns ......
    isnull(level10.GrpLine, isnull(level9.GrpLine, isnull(level8.GrpLine, isnull(level7.GrpLine, isnull(level6.GrpLine, isnull(level5.GrpLine, isnull(level4.GrpLine, isnull(level3.GrpLine, isnull(level2.GrpLine, level1.GrpLine))))))))) GrpLine,
    level1.groupmask
into
    #OACT
from 
    (select 
         AcctCode, AcctName, GroupMask, GrpLine, FatherNum, FormatCode, Levels 
     from 
         oact with(nolock) 
     where 
         levels = '1') level1 
left join
    (select 
         AcctCode, AcctName, GroupMask, GrpLine, FatherNum, FormatCode, Levels 
     from 
         oact with(nolock) 
     where 
         levels = '2') level2 on level2.fathernum = level1.acctcode
left join
    (select 
         AcctCode, AcctName, GroupMask, GrpLine, FatherNum, FormatCode, Levels 
     from 
         oact with(nolock) 
     where 
         levels = '3') level3 on level3.fathernum = level2.acctcode
--- ... and so on for level 4 through 10 .....

А это мой взгляд на Хану:

CREATE LOCAL TEMPORARY COLUMN TABLE #OACT AS (

        SELECT level1."acctcode" AS "acctcode1", level1."acctname" AS "acctname1", 
            level1."fathernum" AS "fathernum1", level1."FormatCode" AS "formatcode1", 
            level1."Levels" AS "Level1", level2."acctcode" AS "acctcode2", level2."acctname" AS "acctname2", 
            level2."fathernum" AS "fathernum2", level2."FormatCode" AS "formatcode2", 
            level2."Levels" AS "Level2", level3."acctcode" AS "acctcode3", level3."acctname" AS "acctname3", 
            level3."fathernum" AS "fathernum3", level3."FormatCode" AS "formatcode3", 
            level3."Levels" AS "Level3", level4."acctcode" AS "acctcode4", level4."acctname" AS "acctname4", 
            level4."fathernum" AS "fathernum4", level4."FormatCode" AS "formatcode4", 
            level4."Levels" AS "Level4", level5."acctcode" AS "acctcode5", level5."acctname" AS "acctname5", 
            level5."fathernum" AS "fathernum5", level5."FormatCode" AS "formatcode5", 
            level5."Levels" AS "Level5", level6."acctcode" AS "acctcode6", level6."acctname" AS "acctname6", 
            level6."fathernum" AS "fathernum6", level6."FormatCode" AS "formatcode6", 
            level6."Levels" AS "level6", level7."acctcode" AS "acctcode7", level7."acctname" AS "acctname7", 
            level7."fathernum" AS "fathernum7", level7."FormatCode" AS "formatcode7", 
            level7."Levels" AS "level7", level8."acctcode" AS "acctcode8", level8."acctname" AS "acctname8", 
            level8."fathernum" AS "fathernum8", level8."FormatCode" AS "formatcode8", 
            level8."Levels" AS "level8", level9."acctcode" AS "acctcode9", level9."acctname" AS "acctname9", 
            level9."fathernum" AS "fathernum9", level9."FormatCode" AS "formatcode9", 
            level9."Levels" AS "level9", level10."acctcode" AS "acctcode10", level10."acctname" AS "acctname10", 
            level10."fathernum" AS "fathernum10", level10."FormatCode" AS "formatcode10", 
            level10."Levels" AS "level10", 
            IFNULL(level10."GrpLine", IFNULL(level9."GrpLine", IFNULL(level8."GrpLine", IFNULL(level7."GrpLine", 
            IFNULL(level6."GrpLine", IFNULL(level5."GrpLine", IFNULL(level4."GrpLine", IFNULL(level3."GrpLine", 
            IFNULL(level2."GrpLine", level1."GrpLine"))))))))) AS "GrpLine", level1."groupmask" 

        FROM (

        SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", "Levels" 
            FROM OACT 
            WHERE "Levels" = '1') AS level1 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '2') AS level2 ON level2."fathernum" = level1."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '3') AS level3 ON level3."fathernum" = level2."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '4') AS level4 ON level4."fathernum" = level3."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '5') AS level5 ON level5."fathernum" = level4."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '6') AS level6 ON level6."fathernum" = level5."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '7') AS level7 ON level7."fathernum" = level6."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '8') AS level8 ON level8."fathernum" = level7."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '9') AS level9 ON level9."fathernum" = level8."acctcode" 
            LEFT OUTER JOIN (SELECT "AcctCode", "AcctName", "GroupMask", "GrpLine", "FatherNum", "FormatCode", 
                "Levels" 
            FROM OACT 
            WHERE "Levels" = '10') AS level10 ON level10."fathernum" = level9."acctcode");

Проблема в том, что я получаю ошибку

неверное имя столбца: LEVEL2.fathernum: строка 56 col 59

У меня есть догадка, что HANA не автоматизирована, как SQL Server при создании временной таблицы с помощью оператора select.

...