बाएं बाहरी जोड़ के लिए समूह के रूप में डमी पंक्ति दिखाएं

Nov 24 2020

मेरे पास 3 टेबल हैं कंपनी, विभाग और कर्मचारी। अब मैं उन सभी कर्मचारियों का पता लगाना चाहता हूं जो कंपनी डी के तहत कंपनी ए में काम करते हैं और किसी भी विभाग को देखने के लिए आंतरिक और साथ ही बाहरी बाहरी डेटा को प्रदर्शित करना चाहते हैं, जिसमें कोई भी कर्मचारी और कंपनी नहीं है जिसके पास कोई विभाग नहीं है।

इस सभी तालिकाओं के बीच मूल संबंध है

**TABLE COMPANY**

  COMPANY_NAME  COMPANY ID
     C1            COMP1
     C2            COMP2
     C3            COMP3

 **TABLE DEPARTMENT**
 DEPARTMENT_NAME    COMPANY_NAME
   D1                C1
   D2                C1
   D3                C2

   **TABLE EMPLOYEE**
  EMPLOYEE_ID   DEPARTMENT_NAME
   E1              D1
   E2              D1
   E3              D1
   E4              D2
   E5              D2

Company -- > Department --- > Employee.

मैं प्रत्येक कॉलम के खिलाफ डमी कॉलम के रूप में इकाई प्रदर्शित करना चाहता हूं।

    ENTITY     COMPANY_NAME DEPARTMENT_NAME EMPLOYEE_ID
    COMPANY      C1           -              -
    DEPARTMENT   C1           D1               
    EMPLOYEE     C1           D1             E1
    EMPLOYEE     C1           D1             E2
    EMPLOYEE     C1           D1             E3
    DEPARTMENT   C1           D2             -
    EMPLOYEE     C1           D2             E4
    EMPLOYEE     C1           D2             E5 
    COMPANY      C2           -              -
    DEPARTMENT   C2           D3             -
    COMPANY      C3           -              -

जवाब

Popeye Nov 24 2020 at 06:54

आप SETऑपरेटर का उपयोग इस UNION ALLप्रकार कर सकते हैं :

SELECT 'COMPANY' AS ENTITY, 
        COMPANY_NAME, 
        '-' AS DEPARTMENT_NAME, 
        '-' AS EMPLOYEE_ID 
   FROM COMPANY C
UNION ALL
SELECT 'DEPARTMENT' AS ENTITY, 
        C.COMPANY_NAME, 
        D.DEPARTMENT_NAME, 
        '-' AS EMPLOYEE_ID 
   FROM DEPARTMENT D 
   JOIN COMPANY C ON C.COMPANY_ID = D.COMPANY_ID
UNION ALL
SELECT 'EMPLOYEE' AS ENTITY, 
        C.COMPANY_NAME, 
        D.DEPARTMENT_NAME, 
        E.EMPLOYEE_ID 
  FROM DEPARTMENT D 
  JOIN COMPANY C ON C.COMPANY_ID = D.COMPANY_ID
  JOIN EMPLOYEE E ON E.DEPARTMENT_NAME = D.DEPARTMENT_NAME
ORDER BY COMPANY_NAME, 
         CASE WHEN DEPARTMENT_NAME = '-' THEN 1 ELSE 2 END, 
         DEPARTMENT_NAME,
         CASE WHEN EMPLOYEE_ID = '-' THEN 1 ELSE 2 END, 
         EMPLOYEE_ID
gogocho Nov 24 2020 at 08:53

कृपया इसे आज़माएँ:

select
    case entity_disp
        when 1 then 'COMPANY'
        when 2 then 'DEPARTMENT'
        when 3 then 'EMPLOYEE'
    end as entity,
    company_name,
    department_name,
    employee_id
    from
    
(select
    c.company_name,
    d.department_name,
    e.employee_id,
    1 + decode(d.department_name, null, 0, 1) + decode(e.employee_id, null, 0, 1) as entity_disp
from
    company c
    left outer join department d on (d.company_name = c.company_name)
    left outer join employee  e on (e.department_name = d.department_name)
 ) c   
 order by c.entity_disp

इस बात पर ध्यान दें कि योर टैबेल मॉडल के अनुसार यह ऐसा दिखता है कि कंपनी और विभाग के टैब कंपनी_नाम के आधार पर जुड़ गए हैं। इसके अलावा विभाग और कर्मचारी टेबल विभाग_नाम पर आधारित हैं। यह चयन कैसे कार्यान्वित किया जाता है। यदि आवश्यक हो - rework उचित संबंधपरक कॉलम के साथ जुड़ता है।