带有Postgresql和多个CTE的Microsoft Report Builder

时间:2015-03-24 10:37:32

标签: postgresql reporting-services common-table-expression

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

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

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

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

Exampe:

SELECT 'Test' as test

将返回一列(测试)一行(测试)

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

将返回两列(test,result)一行(Test,Success)

直到现在,一切都还好。

但如果我想使用多于一个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

将失败并显示以下错误消息: “未定义的表格测试”

;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

不会返回任何列,也不会返回任何行。

知道为什么会这样吗?

编辑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

结果:“未知的表格调用”

编辑B: 对不起,查询中还剩下两个剩余的缩短

修改C: pgAdmin III中的测试查询:工作

JasperSoft Studio中的测试查询:工作

使用PGNP在MS Report Builder中测试的查询:“未定义的表调用”

编辑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 Driver似乎工作正常,连接已经完成,一切正常。

很快,当我添加第二个CTE时,我收到了错误

3 个答案:

答案 0 :(得分:0)

在这里工作(只是普通的psql终端),所以错误必须在你的框架/客户端应用程序中:

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
        ;

答案 1 :(得分:0)

好的,这里是解决方案:

似乎PGNP OleDB Driver无法处理多个CTE。

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

现在我得到了我的结果并且很开心: - )

不可思议,谢谢你为你的时间而努力。

答案 2 :(得分:0)

我联系了PGNP支持,他们迅速回应了CTE处理中的错误已在1.4.0.3425版本中得到修复。