我在使用当前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时,我收到了错误
答案 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版本中得到修复。