В БД MSSQL оператор group by работает как то странно...
У меня был запрос к MySql написанный для Drupal 7
$query = db_select('cb_services_poll_child','p');
$query ->leftJoin('cb_services_poll', 'pm', 'pm.id = '.$id_widget);
$query ->fields('p', array('vote')); $query ->fields('pm', array('options')); $query ->addExpression('COUNT(*)','n');
$query ->condition('p.srv_id', $id_widget);
$query ->groupBy('p.vote');
$result=$query->execute();
В мускуле всё срабатывало на ура,а MsSql выдавал
is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY
Оказывается группуровать в MsSql`е нужно сразу по всем полям, а не по одному.И поля(после group by) должны быть разделены пробелом и запятой.
Незнаю откуда у Microsoft руки растут..
В итоге:
...
вместо
$query ->groupBy('p.vote');
...
написал
$query ->groupBy('p.vote, pm.options');
Далее если вы используете функции пагинации:
$query ->extend('PagerDefault');
То можете получить следующую ошибку
PagerDefault->execute() (line 79
Решается она следующим образом. Сгруппированный GroupBy раскидываем на 2.Вот так:
...
вместо
$query ->groupBy('p.vote, pm.options');
...
пишем
$query ->groupBy('p.vote');
$query ->groupBy('pm.options');