Что-то вроде этого должно быть лучше:
ALTER Procedure daily_routine
AS
BEGIN
DECLARE @MaxCounT_h_stats BIGINT
,@MaxCounT_hourly_states BIGINT
,@MaxLocation_Count BIGINT;
SET @MaxCounT_h_stats = (select max(t_count) from temp_h_stats);
SET @MaxCounT_hourly_states = (select max(t_count) from temp_hourly_stats);
SET @MaxLocation_Count = (select max(p_location_count) from temp_h_stats);
INSERT INTO temp_stats(i_count,r_count,s_count,w_count,n_count,z_count,t_count,p_hour,p_location,p_location_count,p_location_percentage,p_hour_percentage,d_date)
SELECT SUM(i_count) as i_count
,SUM(r_count) as r_count
,SUM(s_count) as s_count
,SUM(w_count) as w_count
,SUM(n_count) as n_count
,SUM(z_count) as z_count
,SUM(t_count) as t_count
,MAX(IIF(t_count = @MaxCounT_h_stats, time_range, NULL) as p_hour
,MAX(IIF(t_count = @MaxCounT_hourly_states, p_location, NULL) as p_location
,MAX(IIF(p_location_count = @MaxLocation_Count, p_location_count, NULL) as p_location_count
,MAX(p_location_percentage) as p_location_percentage
,(MAX(t_count)*100)/SUM(t_count) as p_hour_percentage
,DATEADD(DD, -1,CURRENT_TIMESTAMP) as recorded_date)
FROM temp_h_stats
END
Ваша основная проблема заключается в том, что вы используете слишком много подзапросов на случай, если вы сможете сделать это с одной таблицей чтения. Один из них:
(SELECT time_range as p_hour from temp_h_stats where t_count= (select max(t_count) from temp_h_stats)),
(SELECT p_location as p_location from temp_hourly_stats where t_count= (select max(t_count) from temp_hourly_stats)),
(SELECT p_location_count as p_location_count from temp_h_stats where p_location_count = (select max(p_location_count) from temp_h_stats)),
возвращает больше одного значения, поэтому вы получаете эту ошибку. Если вам не нравится использовать мой вариант, просто добавьте статистическую функцию в приведенные выше операторы.