WITH TMP AS
(
	SELECT TOP 100
		CAST(SUM(s.total_elapsed_time) / 1000000.0 AS DECIMAL(10, 2)) AS [Total Elapsed Time in S],
		SUM(s.execution_count) AS [Total Execution Count],
		CAST(SUM(s.total_worker_time) / 1000000.0 AS DECIMAL(10, 2)) AS [Total CPU Time in S],
		CAST(SUM(s.total_worker_time) / SUM(s.execution_count) / 1000.0 AS DECIMAL(10, 2)) AS [Avg CPU Time in MS],
		SUM(s.total_logical_reads) AS [Total Logical Reads],
		CAST(CAST(SUM(s.total_logical_reads) AS FLOAT) / CAST(SUM(s.execution_count) AS FLOAT) AS DECIMAL(10, 2)) AS [Avg Logical Reads],
		SUM(s.total_logical_writes) AS [Total Logical Writes],
		CAST(CAST(SUM(s.total_logical_writes) AS FLOAT) / CAST(SUM(s.execution_count) AS FLOAT) AS DECIMAL(10, 2)) AS [Avg Logical Writes],
		SUM(s.total_clr_time) AS [Total CLR Time],
		CAST(SUM(s.total_clr_time) / SUM(s.execution_count) / 1000.0 AS DECIMAL(10, 2)) AS [Avg CLR Time in MS],
		CAST(SUM(s.min_worker_time) / 1000.0 AS DECIMAL(10, 2)) AS [Min CPU Time in MS],
		CAST(SUM(s.max_worker_time) / 1000.0 AS DECIMAL(10, 2)) AS [Max CPU Time in MS],
		SUM(s.min_logical_reads) AS [Min Logical Reads],
		SUM(s.max_logical_reads) AS [Max Logical Reads],
		SUM(s.min_logical_writes) AS [Min Logical Writes],
		SUM(s.max_logical_writes) AS [Max Logical Writes],
		CAST(SUM(s.min_clr_time) / 1000.0 AS DECIMAL(10, 2)) AS [Min CLR Time in MS],
		CAST(SUM(s.max_clr_time) / 1000.0 AS DECIMAL(10, 2)) AS [Max CLR Time in MS],
		COUNT(1) AS [Number of Statements],
		MAX(s.last_execution_time) AS [Last Execution Time],
		s.plan_handle AS [Plan Handle]
	FROM
		sys.dm_exec_query_stats s
		
	 --Most CPU consuming
	GROUP BY s.plan_handle ORDER BY SUM(s.total_worker_time) DESC
		
	-- Most read+write IO consuming
	--GROUP BY s.plan_handle ORDER BY SUM(s.total_logical_reads + s.total_logical_writes) DESC
		
	-- Most write IO consuming
	--GROUP BY s.plan_handle ORDER BY SUM(s.total_logical_writes) DESC
		
	-- Most CLR consuming
	--WHERE s.total_clr_time > 0 GROUP BY s.plan_handle ORDER BY SUM(s.total_clr_time) DESC
)
SELECT
	TMP.*,
	st.text AS [Query],
	qp.query_plan AS [Plan]
FROM
	TMP
OUTER APPLY
	sys.dm_exec_query_plan(TMP.[Plan Handle]) AS qp
OUTER APPLY
	sys.dm_exec_sql_text(TMP.[Plan Handle]) AS st