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

Откуда:
Сообщений: 20
Добрый день!
Требуется помощь в составлении запроса для MS SQL.
Имеется две таблицы -Zayavki (с заявками для выезда к клиенту) и Baza (с данными о клиенте).
Таблица Zayavki состоит из поля с ID клиента . датой выезда и типов выезда (срочный или плановый) - с названием полей id_Klient , Data_Zaezda и Tip соответственно.
Таблица Baza состоит из Id клиента, его имени и адреса - id , Name_Klient, Adress соответственно.
Нужно сделать запрос, в результате которого отобразится 10 самых часто посещаемых клиентов с отображением типа выезда (срочный или плановый).

При таком запросе, я группирую заявки и вижу часто посещаемых клиентов в порядке убывания - но не вижу тип выезда и отображаются ВСЕ клиенты, а не ТОР-10. Прошу помочь знатоков!

SELECT Baza.Name_Klient, Baza.Adress, COUNT(Zayavki.id_Klient ) as Count_US
FROM Zayavki Left JOIN Baza ON Zayavki.id_Klient = Baza.id
WHERE (Zayavki.Data_Zaezda BETWEEN :datPass1 AND :datPass2)
GROUP BY Baza.Name_Klient, Baza.Adress
ORDER BY Count_US Desc, Baza.Name_Klient
19 ноя 16, 11:47    [19911169]     Ответить | Цитировать Сообщить модератору
 Re: Требуется помощь в составлении запроса для двух таблиц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Алекс_1981
но не вижу тип выезда
А в Tip какие значения?
Алекс_1981
отображаются ВСЕ клиенты, а не ТОР-10.
Так напишите вначале top 10
19 ноя 16, 13:05    [19911341]     Ответить | Цитировать Сообщить модератору
 Re: Требуется помощь в составлении запроса для двух таблиц  [new]
Алекс_1981
Member

Откуда:
Сообщений: 20
[quot alexeyvg]
Алекс_1981
но не вижу тип выезда
А в Tip какие значения?
Значения типа string.
19 ноя 16, 13:14    [19911362]     Ответить | Цитировать Сообщить модератору
 Re: Требуется помощь в составлении запроса для двух таблиц  [new]
aleks2
Guest
alexeyvg
Алекс_1981
но не вижу тип выезда
А в Tip какие значения?
Алекс_1981
отображаются ВСЕ клиенты, а не ТОР-10.
Так напишите вначале top 10


Зачем учишь плохому?

with
     c as ( select id_Klient, cnt = COUNT(*), Data_Zaezda = MAX(Data_Zaezda) FROM Zayavki where Data_Zaezda BETWEEN :datPass1 AND :datPass2 group by id_Klient )  -- фсе клиенты
  , с10 as ( select top(10) * from c order by cnt desc ) -- 10  самых-самых
  , с10t as ( select c10.*, z.Tip from c10 left outer join Zayavki as z on z.id_Klient = c10.id_Klient and z.Data_Zaezda = c10.Data_Zaezda ) -- 10 десять вместе с типом последнего заезда
select b.Name_Klient, b.Adress, c.Cnt, c.Data_Zaezda, c.Tip from с10t as c inner join Baza as b on c.id_Klient = b.id
  ORDER BY c.Cnt Desc, b.Name_Klient;


Запомни, чайник, тащить "фсе под группировку" не надо. Ой, не надо.
19 ноя 16, 15:24    [19911564]     Ответить | Цитировать Сообщить модератору
 Re: Требуется помощь в составлении запроса для двух таблиц  [new]
Алекс_1981
Member

Откуда:
Сообщений: 20
Извиняюсь, если написал не корректно вопрос, но последний скрипт выводит ту же информацию что и мой скрипт, только еще с типом последнего заезда.
Но мне "Нужно сделать запрос, в результате которого отобразится 10 самых часто посещаемых клиентов с отображением типа выезда (срочный или плановый)."
Я имел в виду все записи показать с типами выездов, а не последнего выезда.

Например если у клиента выездов cnt = COUNT(*) было 12, то показать все его 12 заявок и у каждой заявки показать тип.
19 ноя 16, 21:05    [19912141]     Ответить | Цитировать Сообщить модератору
 Re: Требуется помощь в составлении запроса для двух таблиц  [new]
Алекс_1981
Member

Откуда:
Сообщений: 20
Сделал так:

with
cW as ( SELECT TOP (10) Baza.Name_Klient, Baza.Adress, COUNT(Zayavki.id_Klient ) as Count_US
FROM Zayavki Left JOIN Baza ON Zayavki.id_Klient = Baza.id
WHERE (Zayavki.Data_Zaezda BETWEEN :datPass1 AND :datPass2)
GROUP BY Baza.Name_Klient, Baza.Adress
ORDER BY Count_US Desc, Baza.Name_Klient ) -- TOP 10 клиентов

select b.Name_Klient, b.Adress, c.Cnt, c.Data_Zaezda, c.Tip from Zayavki as cD inner join Baza as b on c.id_Klient = b.id
Where (cD.ID IN (select top(10) ID from cW order by Count_US desc)) and (Data_Zaezda BETWEEN :datPass1 AND :datPass2)
ORDER BY b.Name_Klient;

Всем СПАСИБО!
19 ноя 16, 22:05    [19912230]     Ответить | Цитировать Сообщить модератору
 Re: Требуется помощь в составлении запроса для двух таблиц  [new]
FreeBard
Member

Откуда:
Сообщений: 223
Алекс_1981,
в with лучше сперва сгруппировать по Zayavki, а потом делать join на Baza
24 ноя 16, 14:09    [19929865]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить