मुझे लगता है कि यह आपको वह दे सकता है जिसकी आप तलाश कर रहे हैं:
;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)