0

結果の行をカンマ区切りの値で1行にしたいので、適用しました

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')

2 番目のクエリ結果を差し引くことはありません。

4

1 に答える 1

1

データフォーマットの問題が原因だと思います。MINUSをaに置き換えてUNION ALL、結果の行を比較します。

または、元の選択を副選択として使用し、外側の選択でxmlagg魔法を適用します。

SELECT rtrim(xmlagg ....))
FROM (
    SELECT
    FROM
    WHERE

    MINUS


    SELECT
    FROM
    WHERE

)。

于 2012-04-17T12:00:53.407 に答える