【解決方法】列の月名で並べ替えます


こんにちは、みんな 、

すべての月と各月の対応する値を選択するクエリがあります。 日付列に基づいて月順に並べ替えたいと考えています。 誰か助けてくれませんか。 さまざまな方法を試しましたが、解決策が見つかりませんでした。 ご協力をよろしくお願いいたします。

例えば ​​:
現在の私の出力:

退職 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

年間 0 0 2 2 2 0 0 0 0 0 0 0
病気 0 0 2 2 2 0 0 0 0 0 0 0

私が望んでいた出力:

退職 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月
年間 2 2 2 0 0 0 0 0 0 0 0 0
病気 2 2 2 2 2 0 0 0 0 0 0 0

つまり、月列の順序はサブクエリの mte.CalendarDate に基づく必要があります。

私が試したこと:

SELECT
		Leave,
		ISNULL([1], 0) AS January,
		ISNULL([2], 0) AS February,
		ISNULL([3], 0) AS March,
		ISNULL([4], 0) AS April,
		ISNULL([5], 0) AS May,
		ISNULL([6], 0) AS June,
		ISNULL([7], 0) AS July,
		ISNULL([8], 0) AS August,
		ISNULL([9], 0) AS September,
		ISNULL([10], 0) AS October,
		ISNULL([11], 0) AS November,
		ISNULL([12], 0) AS December
	FROM
			(
				SELECT
					--YEAR(mte.CalendarDate) AS Years,
					MONTH(mte.CalendarDate) AS Months,
					--DATENAME(month, mte.CalendarDate) AS Calmonth,
					FLOOR(SUM(mte.LeaveDays))AS leaveCount
					,mte.LeaveTypeID
					,mtl.Leave
			
				FROM MST_TBL_Emp_Leaves mte
				LEFT JOIN PPMS_TBL_EmployeeMaster em ON em.Autoid = mte.EmpId
				LEFT JOIN MST_TBL_Leave_Types mtl ON mtl.Autoid = mte.LeaveTypeID
				WHERE
					mte.LeaveTypeID IN (1, 2, 4, 8) AND
					mte.EmpId = 170 AND
					mte.CalendarDate BETWEEN '2023-02-27' AND GETDATE()
				GROUP BY
					--YEAR(mte.CalendarDate),
					MONTH(mte.CalendarDate)
					,mte.LeaveTypeID
					,mtl.Leave
					
			
			) AS source
		PIVOT
		(
			SUM(leaveCount)
			FOR Months IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
		) AS pivotedTable

コメント

タイトルとURLをコピーしました