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

SQL सर्वर यह गिनने के लिए कि एकाधिक दिनांक सीमाओं के बीच मान कितनी बार प्रकट होता है और पिछले सप्ताहों की तुलना में होता है

मुझे लगता है कि यह आपको वह दे सकता है जिसकी आप तलाश कर रहे हैं:

;WITH 
weekcounts AS (
    SELECT Time_Stamp, Emp_ID, [Balance], ROUND(CONVERT(FLOAT,[Balance]) / 60.0,2) AS [Hours], DATEPART(week, Time_Stamp) AS int_week FROM newSampleData
)

,counts AS (
    SELECT Emp_ID, int_week, 1 AS int_count
    FROM weekcounts
    WHERE ([Hours] >= 7.5)
    UNION ALL
    SELECT weekcounts.Emp_ID, weekcounts.int_week, 1 AS int_count
    FROM weekcounts
        INNER JOIN counts
            ON weekcounts.Emp_ID = counts.Emp_ID
            AND (weekcounts.int_week - 1) = counts.int_week
            AND ([Hours] >= 7.5)
)

,countsagg AS (
    SELECT Emp_ID, int_week, SUM(int_count) AS int_count
    FROM counts
    GROUP BY Emp_ID, int_week
)

SELECT Emp_ID, 
       ISNULL([29],0) AS [week 29],
       ISNULL([30],0) AS [week 30],
       ISNULL([31],0) AS [week 31],
       ISNULL([32],0) AS [week 32],
       ISNULL([33],0) AS [week 33] 
FROM countsagg
PIVOT (MAX(int_count) FOR int_week IN ([29],[30],[31],[32],[33])) piv

इसके अलावा यदि बैलेंस एक वर्चर है तो आप प्रदान किए गए कोड में आवश्यकता से अधिक रूपांतरण कर रहे हैं। यह कम कोड के साथ घंटों तक परिणाम देगा:

ROUND(CONVERT(FLOAT,[Balance]) / 60.0,2)



  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. पंक्ति संख्या के बराबर कॉलम मान कैसे सेट करें?

  4. मान को अल्पविराम से अलग करने के लिए COALESCE फ़ंक्शन का उपयोग करना

  5. लिंक-टू-एसक्यूएल का उपयोग करके एकाधिक रिकॉर्ड जोड़ें