2016-11-06 6 views
1

XMLを使用してデータベースからデータを取得していました。ここに私のテーブルです:PL SQL xmlelement:xmlのデータを同じテーブルで相互に排他的な状態から取得する方法

設定表:

class code name 
'm1' 1  Food1 
'm1' 2  Food2 
'p1' 1  PayInCash 
'p2' 2  PayOnline 

Customer Table: 
customer_id food_name payment_method 
CUS123   1   1 
CUS123   2   2 

あなたは、私がその詳細

にマッピングするためにいくつかの内部のコードを使用していることを、見ることができるように、私が与えるクエリを書きたいです次の出力:

Query Output: 
customer_id food_name payment_method 
CUS123   Food1  PayInCash 
CUS123   Food2  PayOnline 

私はxmlelementを使用しているため、XML形式でデータを取得したいと考えています。

SELECT xmlelement("customer_records", 
        XMLAGG(
         xmlelement("record", 
          xmlelement("cus_id", customer_id), 
          xmlelement("food", food_name), 
          xmlelement("payment", payment_method) 
         ) 
        ) 
      ) 

      FROM Customer 
      WHERE customer_id = 'CUS123'; 

条件のために私が参加できないことがわかります。 助けてください。

答えて

1

は、このように、依存サブクエリをお試しください:

SELECT customer_id, 
     (SELECT name FROM Settings s 
     WHERE class LIKE 'm%' AND s.code = c.food_name) AS food_name, 
     (SELECT name FROM Settings s 
     WHERE class LIKE 'p%' AND s.code = c.payment_method) AS payment_method 
FROM customer c; 

例使用してXMLAGG:

SELECT xmlelement("customer_records", 
        XMLAGG(
         xmlelement("record", 
          xmlelement("cus_id", customer_id), 
          xmlelement("food", food_name), 
          xmlelement("payment", payment_method) 
         ) 
        ) 
      ) 
FROM (
     SELECT customer_id, 
      (SELECT name FROM Settings s 
       WHERE class LIKE 'm%' AND s.code = c.food_name) AS food_name, 
      (SELECT name FROM Settings s 
       WHERE class LIKE 'p%' AND s.code = c.payment_method) AS payment_method 
     FROM customer c 
); 

結果:

<customer_records> 
    <record> 
     <cus_id>CUS123</cus_id> 
     <food>Food1</food> 
     <payment>PayInCash</payment> 
    </record> 
    <record> 
     <cus_id>CUS123</cus_id> 
     <food>Food2</food> 
     <payment>PayOnline</payment> 
    </record> 
</customer_records> 
+0

おかげで@krokodilko。出来た – user5005768

関連する問題