मेरे पास उस Employee, ShiftAllocation, ShiftMaster (दो पाली के लिए दो: Shift1 और Shift2) तालिका में नीचे दी गई एक क्वेरी है

SELECT     
   Em.EmployeeId, Em.EmployeeName,
   Sa.ShiftAllocationDate, Sa.ShiftId2, Sa.ShiftId, Sm.ShiftName,
   Sm2.ShiftName AS ShiftName2, Sa.ShiftAllocationId 
FROM        
   ShiftAllocation AS Sa 
INNER JOIN
   EmployeeMaster AS Em ON Sa.EmployeeId = Em.EmployeeId 
LEFT OUTER JOIN
   ShiftMaster AS Sm2 ON Sa.ShiftId2 = Sm2.ShiftId
LEFT OUTER JOIN
   ShiftMaster AS Sm ON Sa.ShiftId = Sm.ShiftId

मुझे यह आउटपुट मिल रहा है:

 ShiftAlld EmployeeId  EmployeeName ShiftAllDate shiftId2 ShifId ShiftName ShiftName2 
   1           19          XYZ       2011-08-01 NULL     1     General    NULL
   2           19          XYZ       2011-08-02 NULL     1     General    NULL
   3           19          XYZ       2011-08-02 NULL    -1     NULL       NULL
   4           19          XYZ       2011-08-02 NULL     1     General    NULL
   5           19          XYZ       2011-08-02 NULL    -2     NULL       NULL
   6           19          XYZ       2011-08-02 NULL     1     General    NULL

मुझे चाहिए

  • shiftId -1 मान को ShiftName को सप्ताहांत के रूप में निर्दिष्ट करना चाहिए
  • ShiftId -2 मान को ShiftName को अवकाश के रूप में निर्दिष्ट करना चाहिए
  • ShiftId2 NULL मान को ShiftName2 को असाइन नहीं के रूप में असाइन करना चाहिए

मुझे यह आउटपुट चाहिए:

ShiftAlld EmployeeId  EmployeeName ShiftAllDate shiftId2 ShifId ShiftName ShiftName2 
   1           19          XYZ       2011-08-01 NULL     1     General    NotAssign  
   2           19          XYZ       2011-08-02 NULL     1     General    NotAssign  
   3           19          XYZ       2011-08-02 NULL    -1     WeekOff    NotAssign  
   4           19          XYZ       2011-08-02 NULL     1     General    NotAssign  
   5           19          XYZ       2011-08-02 NULL    -2     Holiday    NotAssign  
   6           19          XYZ       2011-08-02 NULL     1     General    NotAssign  
1
Bhoomi 30 अगस्त 2011, 09:05
1
यदि आप कोड, एक्सएमएल या डेटा नमूने पोस्ट करते हैं, तो कृपया टेक्स्ट संपादक में उन पंक्तियों को हाइलाइट करें और संपादक टूलबार पर "कोड नमूने" बटन ( { } ) पर क्लिक करें ताकि अच्छी तरह से प्रारूप और वाक्यविन्यास हो सके। इसे हाइलाइट करें! यदि आप त्रुटि संदेश पोस्ट करते हैं, तो कृपया त्रुटि संदेश को ठीक से प्रारूपित करने के लिए ब्लॉकक्वाट्स (` " ` ) का उपयोग करें।
 – 
marc_s
30 अगस्त 2011, 09:38

2 जवाब

सबसे बढ़िया उत्तर

आप इस तरह से कुछ केस का उपयोग कर सकते हैं (अवांछित इसलिए वहां टाइपो की कोई संख्या हो सकती है)।

select Em.EmployeeId, 
       Em.EmployeeName,
       Sa.ShiftAllocationDate, 
       Sa.ShiftId2, 
       Sa.ShiftId, 
       case when sa.ShiftId = -1 then 'Week Off'
            when sa.ShiftId = -2 then 'Holiday'
            else sm.ShiftName
       end as ShiftName,
       case when sm2.ShiftId is null then 'Not assigned'
            else Sm2.ShiftName
       end as ShiftName2, 
       Sa.ShiftAllocationId 
from ShiftAllocation as Sa 
  inner join EmployeeMaster as Em 
    on Sa.EmployeeId = Em.EmployeeId 
  left outer join ShiftMaster as Sm2 
    on Sa.ShiftId2 = Sm2.ShiftId 
  left outer join ShiftMaster as Sm 
    on Sa.ShiftId = Sm.ShiftId
2
Mikael Eriksson 30 अगस्त 2011, 10:30
- चूंकि आप on Sa.ShiftId = Sm.ShiftId में शामिल हो रहे हैं, आपके पास Sm.ShiftId = -1 कभी नहीं होगा, जब तक कि आपके पास Sa.ShiftId = -1 भी न हो। क्या आपके पास ShiftAllocation में पंक्तियाँ हैं जहाँ ShiftID -1 या -2 है?
 – 
Mikael Eriksson
30 अगस्त 2011, 10:21
- अद्यतन क्वेरी। अब कोशिश करो।
 – 
Mikael Eriksson
30 अगस्त 2011, 10:31
आपके उत्तर और त्वरित प्रतिक्रिया की सराहना करें। धन्यवाद।
 – 
Bhoomi
30 अगस्त 2011, 10:36

हालांकि मुझे यकीन नहीं है कि यह करने का यह सबसे अच्छा तरीका होगा; समाधान पर पहुंचने के लिए आप अपने एसक्यूएल में केस का उपयोग करने का प्रयास कर सकते हैं।

संपादित करें: यह http://www.dba-oracle.com/t_case_sql_clause.htm चाहिए अगर आप कोशिश करना चाहते हैं तो आपकी मदद करें।

1
Scorpion 30 अगस्त 2011, 09:10
सहमत v = मामला जब col.x = परीक्षण तब col.x अन्यथा 'कस्टम मान' अंत
 – 
James Kyburz
30 अगस्त 2011, 09:18
मुझे लगता है कि मामले में अगर मैं शिफ्ट आईडी -1 मान शिफ्ट आईडी को वीक ऑफ के रूप में असाइन करना चाहता हूं तो मुझे लगता है कि यह केस के साथ व्यवहार्य होगा। और ShiftId int है। लेकिन मैं इसे शिफ्ट में चाहता हूं -1 मान को शिफ्टनाम को वीक ऑफ के रूप में असाइन करना चाहिए। अन्यथा मुझे CASE में इतना कुछ पता नहीं है।
 – 
Bhoomi
30 अगस्त 2011, 09:18