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

Откуда: Киев
Сообщений: 1387
Мне необходимо получить вот такой результат

Пользователь -- Количество док-в -- LogIn/Out
Сидоров--------------5-------------------True
Иванов--------------7-------------------False
Я --------------0-------------------False
Не я --------------0-----------------true

Есть две таблицы

1 Таблица с документами (T1)
id
name
userid
docActive
.....

2 Таблица пользоветели (T2)
id
username
login
....

Вот моя попытка

select t1.userid as userid, count(t1.userid) as cnt, t2.[LogIn] as LgIn from T1 r 
left join T2 t2 on r.userid=t2.id
	where t1.docActive='True' and t2.[LogIn]='True'
		group by t1.userid, t2.[LogIn]


Мне нужно получить список пользователей которые в логине ну и кол-во документов, а в этом запросе если пользователи есть в логине но у них нет документов то ничего не выбирается и это неправильно

Спасибо.
7 ноя 13, 18:53    [15093347]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
VIT2708
а в этом запросе если пользователи есть в логине но у них нет документов то ничего не выбирается и это неправильно

Потому что вы неправильно перечислили таблицы в своем запросе
Если вам нужны все пользователи, то эта таблица должна быть первой
А к ней уже присоединять другую таблицу
7 ноя 13, 19:06    [15093406]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гость333
Member

Откуда:
Сообщений: 3683
VIT2708
select t1.userid as userid, count(t1.userid) as cnt, t2.[LogIn] as LgIn from T1 r 
left join T2 t2 on r.userid=t2.id
	where t1.docActive='True' and t2.[LogIn]='True'
		group by t1.userid, t2.[LogIn]

Поместив выделенное условие в where, вы превратили left join в inner join.
Переместите это условие сюда:
left join T2 t2 on r.userid=t2.id and t2.[LogIn]='True'
7 ноя 13, 19:10    [15093415]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
VIT2708
Member [заблокирован]

Откуда: Киев
Сообщений: 1387
Гость333
VIT2708
select t1.userid as userid, count(t1.userid) as cnt, t2.[LogIn] as LgIn from T1 r 
left join T2 t2 on r.userid=t2.id
	where t1.docActive='True' and t2.[LogIn]='True'
		group by t1.userid, t2.[LogIn]

Поместив выделенное условие в where, вы превратили left join в inner join.
Переместите это условие сюда:
left join T2 t2 on r.userid=t2.id and t2.[LogIn]='True'


Что то не совсем получается, если убираю с Т1 все userid=0 то есть у юзера нет документов, то нет ни одной строки
7 ноя 13, 19:24    [15093459]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Гость333
Member

Откуда:
Сообщений: 3683
VIT2708
Что то не совсем получается

Ну и на 15093406 обратите внимание, конечно.
После перестановки таблиц нужно будет снова внимательно расставить условия, чтобы left join снова не превратился в inner join.
7 ноя 13, 19:27    [15093466]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
VIT2708
Member [заблокирован]

Откуда: Киев
Сообщений: 1387
Гость333,

Спасибо всем все получилось
7 ноя 13, 19:37    [15093493]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
VIT2708
Гость333,

Спасибо всем все получилось
Как же могло получиться,
если в запросе для таблицы T1 дан псевдоним r,
а в SELECT, WHERE и GROUP BY используется T1?
Зачем сказки рассказывать?
7 ноя 13, 21:27    [15093900]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить