带有 Postgresql 和多个 CTE 的 Microsoft Report Builder

Microsoft Report Builder with Postgresql and multiple CTEs

我在当前的 Microsoft 报表设计器中使用 CTE 创建数据集时遇到问题。

我的数据源是一个 PostgreSQL 数据库,我使用当前版本的 PGNP 连接。

连接正常,我可以根据查询创建数据集并获取我的数据。

但是如果我尝试创建更复杂的查询,例如使用多个 CTE,我将不会获得任何字段。

示例:

SELECT 'Test' as test

将return一列(测试)与一行(测试)

WITH Test as (SELECT 'Test' as test)
SELECT Test
       , 'Success' as result
FROM   Test

将return两列(测试,结果)和一行(测试,成功)

到目前为止,一切正常。

但是如果我想使用多个CTE,我不得不面对以下问题:

WITH Test as (SELECT 'Test' as test),
     TestB as (SELECT 'Test B' as test)
SELECT ta.test, tb.test, 'Success' as result
FROM   Test ta, TestB tb

将失败并显示以下错误消息: "Undefined table Test"

;WITH Test as (SELECT 'Test' as test),
      TestB as (SELECT 'Test B' as test)
SELECT ta.test, tb.test, 'Success' as result
FROM   Test ta, TestB tb

将return没有列也没有行。

知道为什么会这样吗?

编辑A: 这是我实际查询的(简短)版本:

WITH calls AS (
SELECT  acv.id
        , acv.created
        , acv.state
        , acv.statistics_category
        , acv.duration
        , aqv.id as queue_id
        , aqv.name as queue_name
        , acv.target
        , acv.target_name
        , acv.queue_time
        , acv.ringing_duration
        , acv.hold_time
FROM        acd_call_view acv
LEFT JOIN   acd_queue_view aqv ON (aqv.id = acv.fk_acdqueue_id)
ORDER BY    acv.id, acv.created
),
calls_answered as (
    SELECT  *
    FROM    calls
    WHERE   statistics_category = 'answered'
)
SELECT * FROM calls_answered

结果:"Unknown table calls"

编辑 B: 抱歉,查询中还剩下两份起酥油

编辑 C: pgAdmin III 中的测试查询:工作

JasperSoft Studio 中的测试查询:工作

使用 PGNP 在 MS Report Builder 中测试查询:"Undefined table calls"

编辑 D: 一旦删除第二个 CTE,我就会得到结果

WITH calls AS (
SELECT  acv.id
        , acv.created
        , acv.state
        , acv.statistics_category
        , acv.duration
        , aqv.id as queue_id
        , aqv.name as queue_name
        , acv.target
        , acv.target_name
        , acv.queue_time
        , acv.ringing_duration
        , acv.hold_time
FROM        acd_call_view acv
LEFT JOIN   acd_queue_view aqv ON (aqv.id = acv.fk_acdqueue_id)
ORDER BY    acv.id, acv.created
)
SELECT * FROM calls

工作正常,所以我得到了结果,PGNP Ole DB 驱动程序似乎工作正常,连接已建立,一切正常。

当我添加第二个 CTE 时,我得到了错误

在这里工作(只是普通的 psql 终端),所以错误一定是在你的 framework/client 应用程序中:

CREATE TABLE acd_call_view    
        ( id INTEGER NOT NULL
        , created timestamp
        , state integer
        , statistics_category  text
        , duration INTEGER
        , target INTEGER
        , target_name INTEGER
        , queue_time INTEGER
        , ringing_duration INTEGER
        , hold_time INTEGER
        , fk_acdqueue_id INTEGER
        );
CREATE TABLE acd_queue_view    
        ( id INTEGER NOT NULL
        , name  text
        );


WITH calls AS (
SELECT  acv.id
        , acv.created
        , acv.state
        , acv.statistics_category
        , acv.duration
        , aqv.id as queue_id
        , aqv.name as queue_name
        , acv.target
        , acv.target_name
        , acv.queue_time
        , acv.ringing_duration
        , acv.hold_time
FROM        acd_call_view acv
LEFT JOIN   acd_queue_view aqv ON aqv.id = acv.fk_acdqueue_id
ORDER BY    acv.id, acv.created
        )
, calls_answered as (
    SELECT  *
    FROM    calls
    WHERE   statistics_category = 'answered'
)
SELECT * FROM calls_answered
        ;

好的,这里是解决方案:

PGNP OleDB 驱动程序似乎无法处理多个 CTE。

安装了 ODBC 驱动程序并通过 ODBC 配置了一个新的 DateSource。

现在我得到了我的结果,我很高兴 :-)

不过,谢谢你抽出时间。

我联系了 PGNP 支持,他们很快回复说 CTE 处理中的错误已在 1.4.0.3425 版本中修复。