Insert into dbo.Cache(StringSearched, ColName, RowId, PercentMatch) select ValFromUser, ColumnName, RowNumber, Max(Percentage) from #Temp2 Group by ValFromUser, ColumnName, RowNumber order By Percentage desc

Вышеупомянутый оператор SQL дает следующую ошибку:

Column "#Temp2.Percentage" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

Я использовал функцию MAX с процентом, т.е. MAX(Percentage), но все же получаю вышеупомянутую ошибку. Как мне это исправить?

0
Simran 3 Мар 2015 в 20:19

2 ответа

Лучший ответ

Вы должны дать столбцу псевдоним, затем вы сможете использовать его в порядке следования.

Insert into dbo.Cache(
    StringSearched, 
    ColName, 
    RowId, 
    PercentMatch) 
select 
    ValFromUser, 
    ColumnName, 
    RowNumber, 
    Max(Percentage) as MaxPerc 
from 
    #Temp2 
Group by 
    ValFromUser, 
    ColumnName, 
    RowNumber 
order By 
    MaxPerc desc

Кроме того, если в вашей таблице нет поля идентификатора или чего-то в этом роде, использование order by со вставкой бессмысленно.

2
James Z 3 Мар 2015 в 17:24

Поддерживать порядок в таблицах таким способом более или менее бессмысленно, поскольку вам не гарантируется возврат строк в каком-либо определенном порядке, если вы не укажете порядок при извлечении.

Тем не менее, вы можете повторно использовать функцию в следующем порядке:

Insert into dbo.Cache (StringSearched, ColName, RowId, PercentMatch) 
select ValFromUser, ColumnName, RowNumber, Max(Percentage) 
from #Temp2 
Group by ValFromUser, ColumnName, RowNumber 
Order By max(Percentage) desc

Или дайте столбцу псевдоним и используйте его:

Insert into dbo.Cache (StringSearched, ColName, RowId, PercentMatch) 
select ValFromUser, ColumnName, RowNumber, Max(Percentage) Perc
from #Temp2 
Group by ValFromUser, ColumnName, RowNumber 
Order By Perc Desc
1
jpw 3 Мар 2015 в 17:24