Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ग्राहक और ऑर्डर डेटा को संयोजित करने के लिए तीसरी रिपोर्ट कैसे प्राप्त करें

मुझे नहीं लगता कि आपको unpivot . का उपयोग करने की आवश्यकता है . नवीनतम तिथि प्राप्त करने के लिए आप केवल greatest() . का उपयोग कर सकते हैं समारोह।

इस समाधान में दो उपश्रेणियाँ हैं, एक app_mon . की गणना करने के लिए प्रत्येक नए ग्राहक और दूसरे के लिए पिछले दो वर्षों में ऑर्डर देने वाले सभी ग्राहकों के लिए जल्द से जल्द ऑर्डर तिथि की गणना करने के लिए। यह सबसे अधिक प्रदर्शनकारी दृष्टिकोण नहीं हो सकता है लेकिन आपकी पहली प्राथमिकता सही परिणाम प्राप्त करना होना चाहिए; एक बार आपके पास यह हो जाने के बाद यदि आवश्यक हो तो आप इसे ट्यून कर सकते हैं:

with cust as 
(
    select d.dist_id as id
          , greatest(d.setup_dt, d.reinstate_dt, d.local_reinstate_dt) as app_mo 
    from mjensen_dev.gc_distributor d
    where d.setup_dt >= date '2017-01-01'
    or d.reinstate_dt >= date '2017-01-01'
    or d.local_reinstate_dt >= date '2017-01-01'
) , ord as 
(
    select o.dist_id as id
          , min(o.ord_dt) as ord_mon 
          , sum(o.oal) as ord_amt
    from gc_orders o
    where o.ord_dt >= date '2017-01-01'
    group by o.dist_id
          , trunc(o.ord_dt,'mm')
)
select cust.dist_id as id
       , cust.app_mon
       , ord.ord_mon
       , floor(months_between(ord.ord_mon, cust.app_mon ) as mon_diff
       , sum(o.oal) as ord_amt
from cust
     inner join gc_orders o on cust.id = o.dist_id
order by 1, 2
/

आप mon_diff . की मेरी गणना में बदलाव करना चाह सकते हैं . यह गणना 2018/2/1 - 2018/1/1 को एक महीने के अंतर के रूप में मानती है। क्योंकि मुझे यह अजीब लगता है कि एक ग्राहक जो ऑर्डर देने वाले दिन ऑर्डर देता है, उसके पास एक mon_diff होगा। 1 के बजाय शून्य। लेकिन यदि आपका व्यवसाय नियम का विवरण सही है तो आपको गणना में 1 जोड़ना होगा। इसी तरह मैंने trunc() . को शामिल नहीं किया है तिथियों के प्रसंस्करण में लेकिन आप इसे बहाल करना चाह सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLSQL बाइंड चर और होस्ट चर के बीच क्या अंतर है

  2. ora-12154 हल नहीं कर सका... oracle तत्काल क्लाइंट के साथ

  3. ओरेकल एक्सप्रेस 11g अपवाद अजीब

  4. ईबीएस वेबलॉजिक डोमेन R12.2 . के खो जाने या भूल जाने वाले एडमिन पासवर्ड को बदलने के चरण

  5. तालिका फ़ंक्शन से एन कॉलम लौटाएं