Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230

Distinct И Left Join

15.05.2015, 11:18. Показов 2929. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю выборку, отображающую количество заказов клиентов за различные периоды.
Упёрся в то, что по одному клиенту выводятся строки по каждому совпадению между таблицами ЗАКАЗЫ - КЛИЕНТЫ

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
declare
@firstlimit int=30,
@secondlimit int=60,
@thirdlimit int=90;
 
select 
distinct np.id as 'ID физлица',
dbo.fn_get_fio(np.surname,np.name,np.patronymic) as 'ФИО',
c.contact_content as 'Телефон',
o.id as 'id заказа' ,
o.date_to_archive,
 
(select count(*) from orders where id_client=np.id and date_to_archive between GETDATE()-@firstlimit and GETDATE()) as 'Сегодня - 30 дней',
(select count(*) from orders where id_client=np.id and date_to_archive between getdate()-@secondlimit and GETDATE()-@firstlimit) '-60 -30', 
(select count(*) from orders where id_client=np.id and date_to_archive between getdate()-@thirdlimit and GETDATE()-@secondlimit) as '-90 -60'
 
from orders o
left join natural_person np on np.id=o.id_client
left join contacts c on c.id_parent=np.id and c.parent_type=0 
where 
id_client is not null
выборка:
ID физлица ФИО Телефон id заказа date_to_archive Сегодня - 30 дней
4 Иванов Иван Иванович 89268888888 10 2015-04-30 3
4 Иванов Иван Иванович 89268888888 11 2015-04-30 3
4 Иванов Иван Иванович 89268888888 12 2015-04-30 3
5 Петров Петр Петрович NULL 14 2015-04-30 1
10 NULL 17 2015-05-13 1
11 NULL 18 2015-05-13 1
12 NULL 20 2015-05-13 1
Distinct почему-то тут не работает. Подскажите в чём неправ я
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2015, 11:18
Ответы с готовыми решениями:

LEFT JOIN ???
После выполнения запроса с использованием LEFT JOIN в конце результирующего набора данных добавляются какие-то пустые записи ! Что это...

Запрос с Left Join
Ребят, помогите пожалуйста разобраться! Нужно запрос построить, вообще, в Access, но думаю не принципиально, лишь бы используя язык SQL. ...

Запрос по left join
Здравствуйте. Подскажите логику запроса. Имеется стандартный select A.name1, A.name2, count (B.name3) FROM TableA A LEFT JOIN...

8
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
15.05.2015, 11:19
Цитата Сообщение от Antykus Посмотреть сообщение
Distinct почему-то тут не работает
с чего вы решили. я не вижу ни одной повторяющейся строки
0
 Аватар для Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
15.05.2015, 11:21  [ТС]
T-SQL
1
distinct np.id as 'ID физлица',
ID физлица ФИО Телефон id заказа date_to_archive Сегодня - 30 дней
4 Иванов Иван Иванович 89268888888 10 2015-04-30 3
4 Иванов Иван Иванович 89268888888 11 2015-04-30 3
4 Иванов Иван Иванович 89268888888 12 2015-04-30 3
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
15.05.2015, 11:22
Цитата Сообщение от Antykus Посмотреть сообщение
Distinct почему-то тут не работает
distinct работает как полагается.
У вас в одном из столбцов различающиеся значения.
1
 Аватар для Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
15.05.2015, 11:24  [ТС]
Просьба подсказать, как схлопнуть в одну строку те строки, в которых совпадает значение первого поля
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
15.05.2015, 11:27
Цитата Сообщение от Antykus Посмотреть сообщение
Просьба подсказать, как схлопнуть в одну строку те строки, в которых совпадает значение первого поля
сгруппировать
0
 Аватар для Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
15.05.2015, 11:31  [ТС]
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
declare
@firstlimit int=30,
@secondlimit int=60,
@thirdlimit int=90;
 
select 
distinct np.id as 'ID физлица',
dbo.fn_get_fio(np.surname,np.name,np.patronymic) as 'ФИО',
c.contact_content as 'Телефон',
o.id as 'id заказа' ,
o.date_to_archive,
 
(select count(*) from orders where id_client=np.id and date_to_archive between GETDATE()-@firstlimit and GETDATE()) as 'Сегодня - 30 дней',
(select count(*) from orders where id_client=np.id and date_to_archive between getdate()-@secondlimit and GETDATE()-@firstlimit) '-60 -30', 
(select count(*) from orders where id_client=np.id and date_to_archive between getdate()-@thirdlimit and GETDATE()-@secondlimit) as '-90 -60'
 
from orders o
left join natural_person np on np.id=o.id_client
left join contacts c on c.id_parent=np.id and c.parent_type=0 
where 
id_client is not null
group by np.id, np.surname,np.name,np.patronymic,c.contact_content,o.id,o.date_to_archive
результат тот же. Что делаю не так?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
15.05.2015, 11:34
"group by np.id" нужно, группируем по первому полю
только что будешь вместо остальных полей выводить решай сам
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
15.05.2015, 11:39
Да просто уберите id заказа из запроса и все.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2015, 11:39
Помогаю со студенческими работами здесь

СТЕ и left join
Суть вопроса в том что левое соединение рузультирует таблицу, которую можно получить только внутренним соединением в таблице КВ хранятся...

Задвоение при LEFT JOIN
Доброго времени суток. При решении задач с сайта http://www.sql-ex.ru столкнулась со странной работой оператора LEFT JOIN. Имеются...

left outer join по паре полей
есть две таблицы, ключ двойной, как их склеить left outer join'ом чтобы множество не расширялось слишком сильно, т.е чтобы для каждой...

Left outer join возвращает null
SELECT .*, s.Id as SiteId, . as , ., . as , b. as BlogTitle, t.Cost FROM Sites as s INNER JOIN Blogs as b ON b.Id = b.SiteId INNER...

LEFT JOIN странно влияет на результат запроса
Вопрос скорее теоретического характера. Есть 2 таблицы, связанные через 4 поля-ключа. В каждой по миллиону записей примерно. Когда я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru