IF OBJECT_ID('Tempdb..#MonthDetails') IS NOT NULL
Drop Table #MonthDetails
Declare @monthdate DATE ='05-5-2017'--Provide date
SET @monthdate =CONVERT(VARCHAR(10), @monthdate, 105)
DECLARE @y INT = DATEPART(YEAR,@monthdate),
@EndOFMonth Varchar(10),
@StartOfMonth Varchar(10)
CREATE TABLE #MonthDetails(ID Int IDENTITY,[MonthName] Varchar(10),EndOFMonth Varchar(10),StartOfMonth Varchar(10)
,[Mon] INT,[Tue] INT,[Wed] INT,[Thu] INT, [Fri] INT,[Sat] INT,[Sun] INT,[Sum] INT)
SET @EndOFMonth= CONVERT(VARCHAR(10),EOMONTH(@monthdate),105)
SET @StartOfMonth=CONVERT(VARCHAR(10),DATEADD(month, DATEDIFF(month, 0, @monthdate), 0),105)
DECLARE @d DATETIME = dateadd(year, @y - 1900, 0)
;WITH CTE
AS
(
SELECT 1 A,
LEFT(DATENAME(WEEKDAY, @D), 3) B,
DATENAME(MONTH, 0) MONTH,
1 SORT
UNION ALL
SELECT A + 1 A,
LEFT(DATENAME(WEEKDAY, @D + A), 3) B,
DATENAME(MONTH, @D + A) MONTH,
DATEPART(MONTH, @D + A) SORT
FROM CTE WHERE A < DATEPART(DAYOFYEAR, DATEADD(YEAR, 1, @D)-1)
)
INSERT INTO #MonthDetails([MonthName],EndOFMonth,StartOfMonth,[Mon],[Tue],[Wed],[Thu],[Fri],[Sat],[Sun],[Sum])
SELECT [MONTH],
@EndOFMonth,
@StartOfMonth,
[Mon],[Tue],[Wed],[Thu],[Fri],[Sat],[Sun],
[Mon]+[Tue]+[Wed]+[Thu]+[Fri]+[Sat]+[Sun] [Sum]
FROM cte
PIVOT (COUNT(a) FOR [b] IN ([Mon],[Tue],[Wed],[Thu],[Fri],[Sat],[Sun],[Sum])) AS pvt WHERE [MONTH]=DATENAME(MM,@monthdate)
ORDER BY sort
OPTION (MAXRECURSION 366)
;With Result
AS
(
SELECT ISNULL(NULL,'FirstDate') AS Details ,StartOfMonth AS [Count] FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'LastDate') ,EndOFMonth FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Mon') , CAST([Mon] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Tues') , CAST([Tue] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Wed') , CAST([Wed] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Thur') , CAST([Thu] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Fri') , CAST([Fri] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Sat') , CAST([Sat] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Count of Sun') , CAST([Sun] AS VARCHAR(5)) FROM #MonthDetails UNION ALL
SELECT ISNULL(NULL,'Total Days Of Month'),CAST([Sum] AS VARCHAR(5)) FROM #MonthDetails
)
SELECT * from Result
Output
Details |Count
-------------------------------------
FirstDate |01-01-2017
LastDate |31-01-2017
Count of Mon |5
Count of Tues |5
Count of Wed |4
Count of Thur |4
Count of Fri |4
Count of Sat |4
Count of Sun |5
Total Days Of Month |31