2016-10-08 2 views
0

У меня есть 3 таблицы:Игнорируйте идентификаторы, которые перечислены в верхних

Client1 (id, Name) 
Client2 (id, Name) 
Tasks (id, ClientType, ClientId, Task) 

мне нужно, чтобы получить верхние (20) наиболее часто используемых клиентов и задачи, а затем мне нужно перечислить все клиент от client1 и client2 КРОМЕ идентификаторов которые находятся в верхней части (20)

ClientType = 0 refers to Client1 table 
ClientType = 1 refers to Client2 table 

если есть только 5 различных клиентов в задачах, чем будут перечислены эти 5 клиентов, а затем остальную часть их

Пример:

ClientID ClientType Task 
-------------------------- 
1  0   Task1 
1  1   Task2 
402  0   Taks6 
200  0   Task44 
2  1   Task7 

остальные клиентов из client1 и client2
все идентификаторы из client1, где идентификатор не (1,402,200)
все идентификаторы из client2, где идентификатор не (1,2)

Я действительно надеюсь, что я хорошо объяснил эту проблему, этот запрос является основным для того, что мне действительно нужно, но это основная проблема. Я сделал запрос, в котором перечислены самые популярные клиенты и ВСЕ клиенты из client1 и client2, но я не могу сделать запрос, который будет игнорировать идентификаторы top x.

+2

пожалуйста показать некоторые примеры данных и показать ожидаемый результат – TheGameiswar

ответ

0

Если мое понимание хорошее, этот запрос может сделать работу.

SELECT TOP(20) ClientID, ClientType 
FROM tblTasks 
GROUP BY ClientID, ClientType 
ORDER BY count(*) DESC 
UNION 
SELECT ClientID, 0 
FROM client1 
UNION 
SELECT ClientID, 1 
FROM client2 
+0

ти для ответа, но, tblTasks не все клиенты из client1 и client2, если есть 30 клиентов в client1 и 50 клиентов в client2 я необходимо получить 80 строк, где top x - наиболее используемые клиенты (в табличных задачах) из таблиц client1 и client2. В принципе, я должен получать такое же количество клиентов, если я использую union на клиентских и клиентских таблицах только с разным порядком. – edis1409

+0

Хорошо, я изменил запрос в соответствии с вашим комментарием. – Polux2

0
drop table #tblTop20 
SELECT TOP(20) ClientID, ClientType, count(*) as count1 
into #tblTop20 
FROM [dbo].[Tasks] 
GROUP BY ClientID, ClientType 
order by Count(*) Desc 

SELECT ClientID, ClientType , Count1 as rank 
FROM #tblTop20 
UNION 
SELECT ID, 0,0 
FROM [dbo].Client1 where ID not in (
select ClientID from #tblTop20 where ClientType=0) 
UNION 
SELECT Id, 0,0 
FROM [dbo].Client2 where ID not in (
select ClientID from #tblTop20 where ClientType=1) 
order by 3 desc 
Смежные вопросы