2013-09-27 3 views
1

Я пишу сценарий с использованием базы данных Oracle 11g.SQL - Извлечь поле из подзапроса

В настоящее время у меня есть несколько вложенных подзапросов. Мне нужно получить поле из одного из этих подзапросов, но с некоторыми трудностями. Мой сценарий в настоящее время:

SELECT a.PARTY_ID, a.PARTY_NAME, a.STATUS 
     ,a.OBJECT_VERSION_NUMBER, a.PARTY_NUMBER 
FROM HZ_PARTIES a 
WHERE a.PARTY_TYPE = 'ORGANIZATION' 
AND  a.STATUS = 'A' and a.party_id = 4402 
AND  a.CREATED_BY_MODULE IN ('HZ_CPUI','TCA_V1_API','TCA_FORM_WRAPPER') 
AND  (a.PARTY_ID IN (SELECT b.PARTY_ID FROM HZ_CUST_ACCOUNTS b 
      WHERE b.CUSTOMER_TYPE = 'R' 
      AND b.CUST_ACCOUNT_ID IN (SELECT c.BILL_TO_CUSTOMER_ID FROM RA_CUSTOMER_TRX_ALL c 
        WHERE c.BILL_TO_CUSTOMER_ID IS NOT NULL 
        AND c.LAST_UPDATE_DATE < SYSDATE-100))) 

Я пытаюсь выбрать поле «LAST_UPDATE_DATE» от последнего из вложенных подзапросов (таблица RA_CUSTOMER_TRX_ALL). Я попытался включить select sub-query в раздел SELECT. и раздел FROM, но не может связать его с последней частью подзапроса. Может ли кто-нибудь помочь? Cheers, RussH.

ответ

1

Непроверенный swag на нем. Возможно, вам придется удалить дубликаты в зависимости от ваших данных:

SELECT a.PARTY_ID, a.PARTY_NAME, a.STATUS 
     ,a.OBJECT_VERSION_NUMBER, a.PARTY_NUMBER, c.last_update_date 
FROM HZ_PARTIES a JOIN hz_cust_accounts b 
         ON b.customer_type = 'R' 
          AND a.party_id = b.party_id 
        JOIN ra_customer_trx_all c 
         ON b.cust_account_id = c.bill_to_customer_id 
          AND c.last_update_date < SYSDATE-100 
WHERE a.PARTY_TYPE = 'ORGANIZATION' 
AND  a.STATUS = 'A' and a.party_id = 4402 
AND  a.CREATED_BY_MODULE IN ('HZ_CPUI','TCA_V1_API','TCA_FORM_WRAPPER') 
+0

Спасибо DCookie. Это отлично работает. Я добавил дополнительную строку для сортировки дубликатов. и c.last_update_date = (выберите max (e.last_update_date) из ra_customer_trx_all e, где e.bill_to_customer_id = c.bill_to_customer_id) – RussH

Смежные вопросы