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 语法 从本机更改为直接
一切都会好起来的!
这是
我有一个 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 语法 从本机更改为直接 一切都会好起来的! 这是