忽略顶部列出的ID

时间:2016-10-08 07:58:20

标签: sql-server tsql

我有3张桌子:

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

我需要获得最常用的客户端和任务,然后我需要列出来自client1和client2 EXCEPT ID的所有客户端(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

客户端1和客户端2的其余客户端 来自client1的所有ID,其中id不在(1,402,200)中 来自client2的所有id,其中id不在(1,2)

我真的希望我能很好地解释这个问题,这个查询是我实际需要的基础,但这是主要的问题。我已经创建了一个查询,列出了最常用的客户端以及来自client1和client2的所有客户端,但我无法进行忽略top x id的查询。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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