2015-03-03 3 views
0
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 заявление дает ошибку следующим образом:Агрегатная функция и порядок пунктом в 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) и еще я получаю выше error.How сделать I почини это ?

+3

почему вы вставки заказывали? вставить как есть и сделать заказ, который вы хотите при запросе dbo.Cache – swe

+0

Да, я был глуп в этом. Благодаря :) – Simran

ответ

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 

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

1

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

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

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 

Или дать ccolumn псевдоним и использовать его:

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 
Смежные вопросы