ошибка при выполнении запроса к серверу sql - PullRequest
1 голос
/ 27 ноября 2009

Я получаю сообщение об ошибке, используя этот запрос

select dbresultsid, TestCase, BuildID, Analyzed,
     Verdict, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'PASS') AS PASS, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'FAIL') AS FAIL, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'INCONC') AS INCONC, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'TIMEOUT') AS TIMEOUT 
from results 
where BuildID = 'Beta1'       
group by TestCase,dbresultsid 
order by Analyzed

Там написано

Столбец 'results.BuildID' недопустим в список выбора, потому что это не содержится либо в совокупности функция или предложение GROUP BY. '

Тот же запрос отлично работает в MYSQL. Кто-нибудь может помочь?

Спасибо

Ответы [ 5 ]

1 голос
/ 27 ноября 2009

Измените свой код, чтобы быть таким:

select dbresultsid, TestCase, BuildID, Analyzed,
     Verdict, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'PASS') AS PASS, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'FAIL') AS FAIL, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'INCONC') AS INCONC, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'TIMEOUT') AS TIMEOUT 
from results 
where BuildID = 'Beta1'       
group by TestCase,dbresultsid, BuildID, Analyzed
order by Analyzed

Пока вы фильтруете BuildID только по одному значению, SQL Server требует, чтобы он был указан в группе по списку.

1 голос
/ 27 ноября 2009

Если вы используете Group By в своем запросе, вы должны добавить все столбцы, которые не являются агрегатными функциями, в предложение Group By. Поэтому добавьте BuildID в предложение Group By и все остальные столбцы без агрегатов (например, Verdict и т. Д.), И это будет работать.

Также см. Документацию GROUP BY для получения более подробной информации.

0 голосов
/ 27 ноября 2009

Группировать по средствам - группировать результаты по перечисленным полям и выполнять некоторую статистическую функцию (sum, avg ...) для остальных полей Все, что не имеет count (), avg () или sum (), должно быть в группе по.

Однако похоже, что вы смешали два разных запроса вместе. Если вам нужно количество записей с каждым вердиктом для данного BuildId, запрос просто:

select BuildID, Verdict, count(*)
group by BuildID, Verdict

Если это не то, что вы хотите, вы должны описать, чего вы пытаетесь достичь

0 голосов
/ 27 ноября 2009

Вам нужно либо объединить столбцы BuildID и Analyzed, либо добавить их в группу по. Также обратите внимание, что то, как вы делаете это сейчас, ужасно неэффективно.

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

0 голосов
/ 27 ноября 2009

Предложение Group By в SQL Server разрешает столбцы, которые находятся в предложении Group By, и в случае, если нам нужны некоторые другие столбцы, мы должны получить к ним доступ через агрегатные функции, такие как MAX, MIN и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...