Cognos SQL WITH子句生成语法错误

Cognos SQL WITH子句生成语法错误,sql,cognos,Sql,Cognos,我有一个在Cognos 11中运行的SQL查询,试图使用WITH子句,但由于WITH附近的语法不正确而不断收到错误。我以为我的组织管理员已经禁用了,但我已经向他们确认它已启用,我无法找出我的语法有什么问题。我在本机SQL和直通SQL中都尝试过这一点 我把它包在一个箱子里,在其他方面都很好: CASE WHEN SAPStreams.Stream_Type = 'INTELILINK' THEN ( WITH IntelilinkValues AS ( SELECT

我有一个在Cognos 11中运行的SQL查询,试图使用WITH子句,但由于WITH附近的语法不正确而不断收到错误。我以为我的组织管理员已经禁用了,但我已经向他们确认它已启用,我无法找出我的语法有什么问题。我在本机SQL和直通SQL中都尝试过这一点

我把它包在一个箱子里,在其他方面都很好:

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有问题。希望能从这个社区得到一些帮助。

我在Cognos DB中没有经验,但是这种查询在Standart SQL风格中是不合适的,因为您试图返回三个字段Amount、Payment\u Frequency、No\u of \u Periods作为一个字段TestWITH

不能在查询中放置公共表表达式。即使我纠正了您的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

是的,你说得对-我本来没有这个,但我想可能它不喜欢这种情况,因为它没有指定字段名。抱歉,将进行编辑。第二:CASE运算符仅在SELECT子句中使用。如果您想返回逻辑表达式reslult的set i sdependence,那么您应该使用If BEGIN。。。第三个结尾:什么是SAPStreams.Stream_类型?您是否调用表的字段而不使用FROM运算符?如果从SAPStreams ORDER BY中选择Stream_Type,您应该阅读SQL基础知识。。。偏移量0行仅获取1下一行='INTELLINK'BEGIN END我知道大小写运算符仅在select语句中工作,这就是它所在的位置。这是一个巨大的疑问,我提供的部分是与讨论相关的唯一部分,因此我排除了其余部分。请添加详细解释。