Использования классического ASP и MS-SQL Server 2008Агрегатная функция/Group By - недопустимый колонок
То, что я пытаюсь сделать, это выбрать повторяющиеся записи, и сосчитать их, так что я могу затем обновить первую и удалить отдых.
Мой запрос выбирает дубликаты ОК, но как только я попытаюсь ввести счетчик, он перестает работать с сообщением «Столбец« calendar.id »недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложение GROUP BY. "
Я попытался переписать это и добавил счет ко второй SELECT и добавив id в GROUP BY (и столько же комбинаций такого типа, как я могу думать, но я все еще получаю ошибки. посмотрел на stackoverflow для решения, похоже, немного сложный и не совсем применимый (или я не ищу подходящую вещь)
Где я иду не так? (также это лучший способ искать и редактировать дубликаты в виде таблицы небольшом (200к строк?)
Dim strSQL_dup, rsSQL_dup, SQL_dupRecords, RecCount
strSQL_dup = "SELECT id, COUNT(id) AS RecCount FROM calendar WHERE start_date IN (SELECT start_date FROM calendar WHERE pId = '" & pId & "' GROUP BY start_date HAVING (COUNT(start_date) > 1)) "
Set rsSQL_dup = conn.Execute(strSQL_dup)
While Not rsSQL_dup.EOF
If RecCount = 1 Then
'will eventually update the row
response.write(rsSQL_dup("id")) ' id of first'
Else
'will eventually delete the other rows
response.write(rsSQL_dup("id")) ' id of subsiquet rows
End If
rsSQL_dup.MoveNext
Wend
@ Mihai - Это calendar.id, без подчеркивания –
Не имеет отношения к комментарию вопроса: вы код (вероятно) очень подвержен атакам SQL-инъекций. Попытайтесь поместить это внутри SP и избегать использования (без параметрических) динамических запросов. – jean