Есть 3 таблицы:TSQL Cross Нанести не работает, как ожидалось
- Пользователи
- Depts (хотя и не кажется необходимым для запроса, но ...)
- Сообщения
Пользователи:
UID, DeptID, Name, Surname, Admin
U1 DeptA John Doe 0
U2 DeptB Jack Fisher 0
U3 DeptA Jill Smith 0
U4 DeptA Joan Green 1
U5 DeptC Jeff Jones 1
U6 DeptA Amanda Reed 0
......
Отдела:
DeptID, DeptName
DeptA Denver
DeptB Boston
DeptC Seattle
Сообщений:
Sender, Receiver, Message, CreatedDate, Seen
U1 U3 Msg1 20152310 0
U1 U4 Msg2 20152310 0
U4 U1 Msg3 20152310 0
U3 U4 Msg4 20152310 0
U1 U3 Msg5 20152310 0
U3 U1 Msg6 20152310 0
(пользователи могут отправлять сообщения только другим пользователям в той же МЭИ)
с как вход только один параметр, таким образом, UID
Мне нужно создать список всех пользователей одного и того же департамента (кроме входного UID) в качестве заголовков, поэтому в примере
U3 U4 U6
с подробным описанием (имя, фамилия), чтобы создать список вкладок
, а затем для каждого из выше UID, список с последними 20 сообщений, где U1 участвует как в качестве отправителя и получателя
Для заполнения чат боковой панели вы можете увидеть здесь: http://www.keenthemes.com/preview/metronic/theme/admin_4/
нажав на значок верхней правой
Я попытался с этим .. но есть много дублей, которые не знают, как удалить: возможно применить крест не правая команда ... :-(
SELECT u.UID,
u.PWD,
i.Sender,
I.MessageText
.....
FROM (
SELECT S.UID,
S.PWD
FROM dbo.Users u
JOIN dbo.Users u2 ON u.DeptID=u2.DeptID
WHERE [email protected]_UID
ORDER BY u.Admin DESC
) AS u
CROSS APPLY
(
SELECT TOP (20)
m.Sender,
m.Message,
m.CreatedDate,
m.Seen
FROM dbo.Messages m
WHERE [email protected]_UID
OR [email protected]_UID
ORDER BY m.CreatedDate DESC
) m;
Может подсказать, что не так?
Благодаря
Джо
Привет! Спасибо за ответ. На самом деле, моя цель состояла в том, чтобы собрать все вместе в один единственный запрос, но, возможно, это намного проще хранить 2 отдельных запроса ... Я еще немного подумаю. – Joe
Причина, по которой я буду использовать два запроса, состоит в том, что если у пользователя более одного сообщения, они будут в результатах дважды, но тогда у вас будут дубликаты в списке пользователей. Личный опыт также учил меня, что несколько небольших запросов, которые возвращают именно то, что я хочу для определенного представления, обычно быстрее, чем попытка использовать вывод более сложного запроса для нескольких видов. – izzy
Да, я вижу .. и на самом деле это то, что я обычно делаю, но хотел бы посмотреть, было ли элегантное решение с одним запросом. – Joe