Конвертировать OUTER APPLY в Redshift - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть скрипт MSSQL Server, который мне нужно конвертировать в Redshift

Вот часть сценария

 OUTER APPLY
        (
        SELECT  MAX(CASE WHEN ctt.codetagid = 7149 THEN Id ELSE 0 END) AS CslId,
                MAX(CASE WHEN ctt.codetagid = 9736 THEN Id ELSE 0 END) AS LearnId,
                MAX(CASE WHEN ctt.codetagid = 9735 THEN Id ELSE 0 END) AS PMId,
                MAX(CASE WHEN ctt.codetagid = 10299 THEN Id ELSE 0 END) AS UpSell
        FROM    public.billing_codes_custom_tag ctt 
        WHERE   ctt.customcodeid = bcc.id
                AND ctt.codetagid IN(7149,9736,9735,10299)
        ) AS codeLabel

У меня ошибка

'(', ',',,,, AT, CROSS, EXCEPT, FETCH, FULL, GROUP, HAVING, INNER, INTERSECT, ISNULL, JOIN, LEFT, LIMIT, MINUS, ЕСТЕСТВЕННЫЙ, NOTNULL, OFFSET, OPERATOR, ЗАКАЗ, ПРАВО, СОЮЗ, ГДЕ или '[' ожидаемый, получил 'НАРУЖНЫЙ'

в этом ряду OUTER APPLY

Как я могу преобразовать этот материал в Redshift?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы бы использовали LEFT JOIN и агрегацию:

LEFT JOIN
    (SELECT ctt.customcodeid, 
            MAX(CASE WHEN ctt.codetagid = 7149 THEN Id ELSE 0 END) AS CslId,
            MAX(CASE WHEN ctt.codetagid = 9736 THEN Id ELSE 0 END) AS LearnId,
            MAX(CASE WHEN ctt.codetagid = 9735 THEN Id ELSE 0 END) AS PMId,
            MAX(CASE WHEN ctt.codetagid = 10299 THEN Id ELSE 0 END) AS UpSell
     FROM public.billing_codes_custom_tag ctt 
     WHERE ctt.codetagid IN (7149, 9736, 9735, 10299)
     GROUP BY ctt.customcodeid
    ) codeLabel
    ON codeLabel.customcodeid = bcc.id
0 голосов
/ 06 сентября 2018

Поскольку НАРУЖНОЕ ПРИМЕНЕНИЕ совпадает с LEFT JOIN

Я переписываю это так

LEFT JOIN
    (
    SELECT  MAX(CASE WHEN ctt.codetagid = 7149 THEN Id ELSE 0 END) AS CslId,
            MAX(CASE WHEN ctt.codetagid = 9736 THEN Id ELSE 0 END) AS LearnId,
            MAX(CASE WHEN ctt.codetagid = 9735 THEN Id ELSE 0 END) AS PMId,
            MAX(CASE WHEN ctt.codetagid = 10299 THEN Id ELSE 0 END) AS UpSell
    FROM    public.billing_codes_custom_tag ctt 
    WHERE   ctt.customcodeid = bcc.id
            AND ctt.codetagid IN(7149,9736,9735,10299)
    ) AS codeLabel
...