带有 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 版本中修复。
我在当前的 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 版本中修复。