带有Postgresql和多个CTE的Microsoft报表生成器

带有Postgresql和多个CTE的Microsoft报表生成器,postgresql,reporting-services,common-table-expression,Postgresql,Reporting Services,Common Table Expression,我在当前的Microsoft报表设计器中使用CTE创建数据集时遇到问题 我的数据源是一个PostgreSQL数据库,我使用当前版本的PGNP连接 连接工作正常,我可以根据查询创建数据集并获取数据 但是如果我尝试创建更复杂的查询,比如使用多个CTE,我将不会得到任何字段 例如: SELECT 'Test' as test 将返回一列测试和一行测试 WITH Test as (SELECT 'Test' as test) SELECT Test , 'Success' as resu

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

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

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

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

例如:

SELECT 'Test' as test
将返回一列测试和一行测试

WITH Test as (SELECT 'Test' as test)
SELECT Test
       , 'Success' as result
FROM   Test
将返回两列测试,结果为一行测试,成功

到现在为止,一切都很好

但如果我想使用多个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
将不返回任何列和行

知道为什么会这样吗

编辑一个: 下面是我实际查询的简短版本:

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驱动程序似乎工作正常,连接正常,一切正常


当我添加第二个CTE时,我立即发现错误

仅在普通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
        ;

好的,这里是解决方案:

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

安装了ODBC驱动程序,并通过ODBC配置了新的数据源

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


无论如何,感谢joop抽出时间。

我联系了PGNP支持部门,他们很快回复说CTEs处理中的错误已在build 1.4.0.3425中修复。

在这里工作。请张贴您的确切查询顺便说一句:前导分号;将在postgresql中引入空语句NULL语句。您好,这正是查询。。。我用这个查询测试了它,但它在这里不起作用啊,好吧,这就解释了为什么CTE是领先的;不会返回任何结果。但是,如果我尝试使用多个CTE,为什么会出现未定义的表测试错误?因为您的框架引用了标识符/crystal-ballapv.id在上一次查询中没有相关nampe apv。请发布真正的查询,或者至少在发布到这里之前进行测试,问题不在CTE中。是的,查询正在工作-我将它们用于Jasper Reporting Server的报告,一切正常。但我需要将报告转移到Microsoft SSRS。因此,我获得了PGNP Ole DB连接器,为SSRS提供到PostgreSQL数据源的连接,并尝试将查询移动到报表生成器。正如我所说,这些查询在pgAdmin III和Jasper Studio中工作,但不通过Ole DB PGNP与MS Report Builder一起工作。我认为,PGNP和多个CTE存在问题,但我找不到任何关于它的信息。。。所以我想这里可能有人也有同样的问题:你是对的,似乎是司机的问题。。。Via ODBC一切正常,谢谢