Предложение Cognos SQL WITH, генерирующее синтаксическую ошибку - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть SQL-запрос, который я выполняю в Cognos 11 и пытаюсь использовать предложение WITH, но продолжаю получать ошибку из-за неправильного синтаксиса рядом с «WITH».Я думал, что мои администраторы org отключили WITH, но я подтвердил, что он включен, и я не могу понять, что не так с моим синтаксисом.Я пробовал это как в Native SQL, так и в сквозном SQL.

Я завернул это в CASE, который в остальном работает нормально:

CASE 
WHEN SAPStreams.Stream_Type = 'INTELILINK' THEN (
    WITH IntelilinkValues AS (
    SELECT 
        LBD.Amount,
        LBD.Payment_Frequency,
        LBD.No_of_Periods
    FROM _SYS_BIC.LeasingRebooksDetails LBD 
    WHERE LBD.Contract_Number='D003498006')
)
ELSE NULL END

Довольно прямо, и яЯ более убежден, что с реализацией Cognos моей организации что-то не так, чем в том, что SQL неисправен.Надеемся на некоторую помощь от этого сообщества.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы не можете поместить общее табличное выражение в запрос.Даже если я исправлю ваш CTE:

CASE 
WHEN SAPStreams.Stream_Type = 'INTELILINK' THEN (
    WITH IntelilinkValues (
        Amount,
        Frequency,
        Periods
    )
    AS (
    SELECT 
        LBD.Amount,
        LBD.Payment_Frequency,
        LBD.No_of_Periods
    FROM _SYS_BIC.LeasingRebooksDetails LBD 
    WHERE LBD.Contract_Number='D003498006'
    )
    select Amount
    from IntelilinkValues
)
ELSE NULL END

... он все равно не будет работать.

Но это может сработать:

WITH IntelilinkValues (
    Amount,
    Frequency,
    Periods
)
AS (
SELECT 
    LBD.Amount,
    LBD.Payment_Frequency,
    LBD.No_of_Periods
FROM _SYS_BIC.LeasingRebooksDetails LBD 
WHERE LBD.Contract_Number='D003498006'
)
select Amount
into #ilv
from IntelilinkValues

select ss.somestuff, 
CASE 
WHEN SAPStreams.Stream_Type = 'INTELILINK' THEN (
    select Amount
    from #ilv
)
ELSE NULL END,
sot.someotherstuff

from SAPStreams ss
  inner join someothertable sot on sot.id = ss.id

where somecondition = 'true'

drop table #ilv
0 голосов
/ 08 февраля 2019

У меня нет опыта в Cognos DB, но такой запрос не подходит в стандартном стиле SQL, потому что вы пытаетесь вернуть ТРИ ПОЛЯ (Amount, Payment_Frequency, No_of_Periods) в качестве ОДНОГО ПОЛЯ (TestWITH) !!!

...