Cognos SQL WITH 子句生成语法错误

Cognos SQL WITH clause generating syntax error

我有一个 SQL 查询,我在 Cognos 11 中是 运行,我正在尝试使用 WITH 子句,但在 "WITH" 附近不断收到语法不正确的错误。我以为我的组织管理员已禁用 WITH,但我已向他们确认它已启用,但我无法弄清楚我的语法有什么问题。我在 Native SQL 和 Pass-through 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

非常直截了当,与我认为 SQL 有问题相比,我更确信我的组织对 Cognos 的实施存在问题。希望得到这个社区的帮助。

我没有 Cognos DB 方面的经验,但是这样的查询在 Standart SQL 风格中是不合适的,因为你试图 return 三个字段(金额,Payment_Frequency,No_of_Periods) 作为一个领域 (TestWITH) !!!

您不能在查询中放入常用的 table 表达式。即使我更正了你的 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

将 SQL 语法更改为 Pass-Through

只需将 SQL 语法 从本机更改为直接 一切都会好起来的! 这是