仅当表a中包含表b中的相应ID时才返回表a的值

时间:2018-08-03 09:48:03

标签: sql sql-server

我尝试搜索答案,但是很难提出问题或制定搜索条件来找到答案。这样吧。

我有存储客户信息的表A和存储客户请求的表B。我正在搜寻一个东西,我想在Bob曾帮助的地方寻找客户。这变得棘手,因为我只希望Bob帮助的每个客户返回1行。使用普通联接将返回多行,因为在Bob帮助该客户的请求中有多个。

请参见下面的表格结构。 (还不能添加图像:()

Table setup

例如,以下查询返回多个行(5,因为Bob出席了5个请求)。

SELECT a.ClientName, b.AttendedBy
FROM TableA A 
JOIN TableB b ON a.ClientId = b.ClientId
WHERE b.AttendedBy = 'Peter'

所以我想要的结果如下:

Results

如果我想知道彼得参加了哪些客户,则结果1,如果我想知道安德鲁参加了哪些客户,则结果2。如果我搜索“迈克尔”,则该客户必须返回任何结果。所以基本上没有什么。仅向客户端显示客户端请求中“ attendedBy”所在的客户端(表b)。

我尝试了多种方法,例如WHERE子句中的DISTINCT SELECT,STUFF()函数,TOP 1,LIMIT,但我没有赢。协助将不胜感激。谢谢!

编辑: p.s,表B和B的其他列具有唯一值,因此使用DISTINCT仍将为Peter参加的同一客户返回多行。

3 个答案:

答案 0 :(得分:1)

如果我的理解正确,您只需要select distinct

SELECT DISTINCT a.ClientName, b.AttendedBy
FROM TableA A JOIN
     TableB b
     ON a.ClientId = b.ClientId
WHERE b.AttendedBy = 'Peter'

答案 1 :(得分:0)

尝试此查询:

SELECT a.ClientName, b.AttendedBy,concat('Result',rank over(order by a.clientName))
FROM TableA A JOIN
     TableB b
     ON a.ClientId = b.ClientId

答案 2 :(得分:0)

谢谢大家

但是我设法做到了。我做了以下事情:

public void ConfigureServices(IServiceCollection services)
{
   ...
   services.AddSingleton<IHostedService, LongRunningService>();
   ...
}