我希望结果行在逗号分隔值的一行中,所以我应用了
rtrim(xmlagg(xmlelement(e, column_name|| ',')).extract('//text()').extract('//text()'),',')
对以下查询的结果行
SELECT
TO_DATE('01-04-2012','dd-MM-yyyy') - 1 + rownum AS d
FROM all_objects
WHERE TO_DATE('01-04-2012','dd-MM-yyyy') - 1 + rownum
<= TO_DATE('30-04-2012','dd-MM-yyyy')
MINUS
SELECT TS_DATE
FROM TS_DTL where emp_id=3 and TS_DATE BETWEEN TO_DATE('01-04-2012','dd-MM-yyyy')
AND TO_DATE('30-04-2012','dd-MM-yyyy')
当我这样做时如下::
SELECT
rtrim(xmlagg(xmlelement(e, TO_DATE('01-04-2012','dd-MM-yyyy') - 1 + rownum || ','))
.extract('//text()')
.extract('//text()') ,',') AS d
FROM all_objects
WHERE TO_DATE('01-04-2012','dd-MM-yyyy') - 1 + rownum
<= TO_DATE('30-04-2012','dd-MM-yyyy')
MINUS
SELECT
rtrim(xmlagg(xmlelement(e, TS_DATE || ','))
.extract('//text()')
.extract('//text()') ,',')
FROM TS_DTL
WHERE emp_id=3
AND TS_DATE
BETWEEN TO_DATE('01-04-2012','dd-MM-yyyy')
AND TO_DATE('30-04-2012','dd-MM-yyyy')
它不会减去第二个查询结果。
答案 0 :(得分:1)
我猜这是由于一些数据格式化问题。将MINUS
替换为UNION ALL
并比较生成的行。
或者使用原始选择作为子选择,在外部选择中应用xmlagg
魔法:
SELECT rtrim(xmlagg ....))
FROM (
SELECT
FROM
WHERE
MINUS
SELECT
FROM
WHERE
)