我不熟悉DB2和Oracle,我们可以执行以下操作
select * from
(WITH A AS (SELECT 'test' FROM DUAL)
SELECT *
FROM A )
我要求在DB2中与此类似,但它不允许我。我的要求与上述不完全相同,但我简化了。
还有另外一个问题,我尝试使用以下查询对结果进行XML输出。但问题是当我调用XMLFOREST
函数时,它限制我只有一列作为输入(在下面的例子中,A*B
它不允许)。
SELECT XMLELEMENT (
NAME "DATA",
XMLAGG (XMLELEMENT (NAME "DJ_STOCK", (XMLFOREST (A, B, A * B)))))
FROM (SELECT *
FROM (SELECT RTRIM (RTRIM (6.0000), '.') A,
RTRIM (RTRIM (6.0000), '.') B
FROM SYSIBM.SYSDUMMY1))
我可以在内部查询中执行A*B
并将其称为C
,然后从xmlforest
函数调用,但由于性能原因,我的实际情况不允许我这样做。任何解决方法?
我使用的是DB2 9.5版本
答案 0 :(得分:0)
我无法帮助您使用XMLFOREST查询,除非连接数据是一个选项,尽管您可以检查IBM页面。IBM XMLFOREST
您要尝试的第一个查询可能是这样的:
SELECT test
FROM ( SELECT 'test' AS test
FROM DUAL) A
虽然,我不明白你为什么要这样做而不是只是调用表格,因为你没有对数据做任何事情。
希望它有所帮助。
答案 1 :(得分:0)
公用表表达式(你称之为WITH
子句)的全部目的是避免子查询,主要是为了便于阅读。随后,CTE用于最外面的SELECT
:
WITH A (B) AS (SELECT 'test' FROM DUAL)
select * from
(SELECT *
FROM A )
请注意,您必须为上面示例中的文字值B
提供计算列('test'
)的名称。