我有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的查询。
答案 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