带有Postgresql和多个CTE的Microsoft报表生成器
我在当前的Microsoft报表设计器中使用CTE创建数据集时遇到问题 我的数据源是一个PostgreSQL数据库,我使用当前版本的PGNP连接 连接工作正常,我可以根据查询创建数据集并获取数据 但是如果我尝试创建更复杂的查询,比如使用多个CTE,我将不会得到任何字段 例如:带有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
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一切正常,谢谢