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

प्रत्येक कर्मचारी के लिए सभी पंच प्राप्त करें?

कर्मचारी द्वारा आदेशित डेटा प्राप्त करने के लिए आप उप-चयन या सीटीई का उपयोग कर सकते हैं और इसे मुख्य डेटा तालिका के रूप में उपयोग कर सकते हैं। कुछ इसी तरह (यदि आवश्यक हो तो इसे अनुकूलित करें):

;with ordered as (
select 
    emp_reader_id as empId,
    CONVERT(DATE, dt) as Punch,
    Row_number()
     OVER (PARTITION BY emp_reader_id ORDER BY CONVERT(DATE, dt) ASC) as OrderedPunch
from trnevents
)
SELECT 
    entered.empId, 
    entered.Punch as PunchIn,
    exited.Punch as PunchOut
from
    ordered as entered
    left join ordered as exited on 
        entered.empId = exited.empId
        and entered.OrderedPunch + 1 = exited.OrderedPunch

स्पष्टीकरण:'आदेशित' सीटीई कर्मचारी के प्रवेश/निकास को दिनांक के अनुसार आदेशित करता है। ROW_NUMBER प्रत्येक कर्मचारी के लिए रीसेट किया जाता है (मुझे लगता है कि emp_reader_id में कर्मचारी आईडी शामिल है) PARTITION BY के कारण .

एक बार जब मुझे प्रत्येक कर्मचारी के लिए काउंटर मिल जाता है, तो मैं उस कर्मचारी के लिए अगले पंच के साथ प्रत्येक कर्मचारी के लिए प्रत्येक पंच (बाईं ओर पहली शर्त) में शामिल हो जाता हूं (बाएं शामिल होने में दूसरी स्थिति)। इस तरह मैं एंट्री कॉलम और एग्जिट (अगला पंच) दिखा सकता हूं।

अपने डेटा में इन और आउट कॉलम मिलने के बाद आप कुछ डेटा को बाहर करना चाह सकते हैं (प्रत्येक कर्मचारी की विषम पंक्तियाँ वे पंक्तियाँ हैं जिन्हें आप चाहते हैं) WHERE entered.OrderedPunch %2 = 1




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL फ़ंक्शंस - फ़ैक्टोरियल

  2. SQL सर्वर संग्रहीत प्रो में वैकल्पिक पैरामीटर?

  3. SQL सर्वर लूप - मैं रिकॉर्ड के एक सेट के माध्यम से कैसे लूप करूं

  4. क्या SQL सर्वर CLR एकीकरण कॉन्फ़िगरेशन फ़ाइलों का समर्थन करता है?

  5. मैं क्लॉज में उपनाम का उपयोग कैसे करूं?