ВЫБЕРИТЕ DISTINCT с типом поля ‘text’ и SUM (amt)

У меня проблемы с запросом SQL:

Вот что я пытаюсь сделать:

"SELECT DISTINCT *, SUM(amt) AS ttl_amt FROM table WHERE..."

Два из моих полей имеют тип «текст», SQL не позволяет выбрать этот тип как DISTINCT, так как они не сравнимы.

Мне нужно сгруппировать относительные элементы и отобразить их как одну строку с объединенным ttl_amt значение, как показано выше.

Я попытался выбрать «нетекстовые» поля (varchar, float, int и т. Д.) В SELECT DISTINCT заявление, а затем потянув текстовые поля в while() цикл с использованием другого SQL-запроса, но эта информация не отображается (текстовые поля).

Если вам нужно больше информации, дайте мне знать.

Есть идеи? Я не эксперт, когда дело доходит до синтаксиса SQL.

1

Решение

Когда используешь агрегатные функции лайк SUM(), COUNT(), AVG() и т. д. все внешние поля внутри SELECT раздел должен быть либо в пределах агрегатные функции или должен быть упомянут в GROUP BY,
Кажется, вы действительно хотите, чтобы SQL был чем-то вроде этого:

  select Field1, -- you can't use * here!
Field2,
...
FieldN,
Sum(amt)
from Table
group by Field1, -- you can't use * here!
Field2,
...
FieldN

group by делает группировку отличной, поэтому вам не нужно никаких дополнительных DISTINCT Вот

2

Другие решения

Вы пытались использовать группу по заявке вместо отдельных? например:

Выберите field1, field2, field3, sum (field4) из таблицы, где … группировать по field1, field2, field3;

С уважением

2

Вы правы: тип данных Text не допускается ни в одной группе. попробуйте через конвертировать

например

SELECT DISTINCT convert(varchar(max),amt) AS ttl_amt FROM table WHERE 1=1

(* Не следует использовать в отдельном)

Редактировать: СУММА на варчарфилде была глупая идея, извините. Исправленный

2
По вопросам рекламы [email protected]