Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Добрый день.

SELECT TOP 20 
f.name as f_name, 
max(f.priority) as f_priority, 
max(f.address) as f_address, 
max(f.business) as f_business, 
max(f.web) as f_web, 
max(f.id_service) as f_id_service, 
max(f.id_city) as f_id_city, 
max(f.id_firm) as f_id_firm, 
max(f.phone) as f_phone, 
max(p.name) as p_name 
FROM Firm f 
left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city AND p.id_firm=f.id_firm 
left join Dogovor d on d.id_service=p.id_service AND d.id_city=p.id_city AND d.id_firm=p.id_firm 
WHERE 
f.name NOT IN (SELECT TOP 40 f.name FROM Firm f left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city 
AND p.id_firm=f.id_firm left join Dogovor d on d.id_service=p.id_service AND d.id_city=p.id_city AND d.id_firm=p.id_firm 
WHERE p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' AND f.dogovor='1' AND d.end_date >= '20131029 09:59:17' 
AND (f.name LIKE '%ав%' OR f.phone LIKE '%ав%') AND (f.phone != '' OR f.address != '') 
AND f.name LIKE '%а%' GROUP BY  f.name ORDER BY f.priority DESC) 

AND p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' AND f.dogovor='1' 
AND d.end_date >= '20131029 09:59:17' AND (f.name LIKE '%ав%' OR f.phone LIKE '%ав%') 
AND (f.phone != '' OR f.address != '') AND f.name LIKE '%а%' 
GROUP BY f.name ORDER BY f_priority DESC


Получаем ошибку

Column "Firm.priority" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.


в коде

f.name NOT IN (SELECT TOP 40 f.name FROM Firm f left join Price p on p.id_service=f.id_service AND p.id_city=f.id_city 
AND p.id_firm=f.id_firm left join Dogovor d on d.id_service=p.id_service AND d.id_city=p.id_city AND d.id_firm=p.id_firm 
WHERE p.id_city='73041' AND p.include='1' AND p.blocked='0' AND f.blocked='0' AND f.dogovor='1' AND d.end_date >= '20131029 09:59:17' 
AND (f.name LIKE '%ав%' OR f.phone LIKE '%ав%') AND (f.phone != '' OR f.address != '') 
AND f.name LIKE '%а%' GROUP BY  f.name ORDER BY f.priority DESC) 


вернее в
GROUP BY  f.name ORDER BY f.priority DESC


Понимаю, что f.priority у нас не выбирается в запросе, так вот:

1) Нужно ли вообще использовать в данном запросе ORDER BY (будет ли в таком случае ORDER BY порядок сортировки как и в главном запросе) ?

2) Как правильно написать данный запрос(полностью)?
29 окт 13, 10:29    [15045003]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с  [new]
Glory
Member

Откуда:
Сообщений: 104760
Amateur7
1) Нужно ли вообще использовать в данном запросе ORDER BY (будет ли в таком случае ORDER BY порядок сортировки как и в главном запросе) ?

Если вам нужно упорядочивание результатов, то гарантировать его может только ORDER BY

Amateur7
2) Как правильно написать данный запрос(полностью)?

Если вы про текст вашей ошибки, то в ней все сказано - clause because it is not contained in either an aggregate function or the GROUP BY clause
29 окт 13, 10:33    [15045032]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Glory
Amateur7
1) Нужно ли вообще использовать в данном запросе ORDER BY (будет ли в таком случае ORDER BY порядок сортировки как и в главном запросе) ?

Если вам нужно упорядочивание результатов, то гарантировать его может только ORDER BY

Amateur7
2) Как правильно написать данный запрос(полностью)?

Если вы про текст вашей ошибки, то в ней все сказано - clause because it is not contained in either an aggregate function or the GROUP BY clause


по первому вопросу спасибо, уже проверил, сортировка нужна, а по второму вопросу - у нас выбирается только f.name, поэтому и ошибка, а как сделать правильно выборку f.name, с учетом группировки по f.name и сортировки по f.priority ?
29 окт 13, 10:38    [15045060]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с  [new]
Glory
Member

Откуда:
Сообщений: 104760
Amateur7
у нас выбирается только f.name, поэтому и ошибка, а как сделать правильно выборку f.name, с учетом группировки по f.name и сортировки по f.priority ?

Какой смысл сортирвки по полю, которого нет в результатах ?
29 окт 13, 10:40    [15045068]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Amateur7
а как сделать правильно выборку f.name, с учетом группировки по f.name и сортировки по f.priority ?

Добавьте f.priority в группировку, тогда по этому полю можно будет отсортировать.
29 окт 13, 10:45    [15045112]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Хм...

Народ, сорри за глупый мусор на форуме, второй раз на этом попадаюсь спросонья...

Спасибо, тема закрыта.
29 окт 13, 10:53    [15045166]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить