C# SQL Server-在一列上是不同的

C# SQL Server-在一列上是不同的,c#,asp.net,sql-server,web-services,C#,Asp.net,Sql Server,Web Services,我有一个查询,在那里我加入了3个关系…a,B和。联接位于唯一的id上。表B包含彼此相似的行,我想对表B中的FK列(a中的PK)执行一个DISTINCT 为了更清楚地说明这一点: A B C --------- --------- --------- No. (PK) Id(PK) Id (PK) Name Role Address No.(

我有一个查询,在那里我加入了3个关系…a,B和。联接位于唯一的id上。表B包含彼此相似的行,我想对表B中的FK列(a中的PK)执行一个DISTINCT

为了更清楚地说明这一点:

    A              B           C
---------      ---------   ---------
No. (PK)       Id(PK)       Id (PK)
Name           Role         Address
               No.(FK)      No.(FK)
表B可以有来自表A的多个人员实例。我需要一个查询,该查询从编号字段上连接的A、B和C中提取字段。表B中的No.列可以有几个值相同的行,因此我想对No.列执行DISTINCT

我该怎么做

示例数据:

NAME          ROLE       ADDRESS
---------------------------------------
John Smith    Manager    1, The Village
Dawn French   Secretary  2, The City
John Smith    SQL Dev    1, The Village
Terry Tibbs   HR Manager 8, The Road
这是关系a、B和C的联接示例:

 SELECT A.Name, B.Role, C.Address 
 FROM A, B, C 
 WHERE A.No = B.No AND B.No = C.No

表B可能包含多个具有多个角色的John Smith(同一个人)->因此我想在唯一标识一个人的编号上做一个区分。这是表A(编号)中的ePK。

听起来您想使用编号列中的group by来总结您的结果。问题是,当No.值相同时,您希望如何处理其他列中的不同值

一种解决方案可能是:

select a.No, a.Name, 
b.MinRole, b.MaxRole, b.RoleCount,
c.Address
from a 
join (
  select b.No, Min(b.Role) as MinRole, Max(b.Role) as MaxRole, 
  Count(distinct b.Role) as RoleCount
  from b group by b.No
) as b on a.No = b.No
join c on a.No = c.No

这假设a.No在a中是唯一的,并且a和c在No中是1对1的

在您的解决方案中,一个人可能有多个角色和多个地址。“一列不同”需要子查询技巧(正如其他人已经向您展示的)。但是,如果您的查询是为每个人显示主要(或只是其中一个)角色和主要地址,那么您的查询可能会简单得多

SELECT
A.Name,
(SELECT TOP 1 Role FROM B WHERE B.No = A.No) AS PrimaryRole, -- you may add ORDER BY here
(SELECT TOP 1 Address FROM C WHERE C.No = A.No) AS PrimaryAddress, -- add ORDER BY
FROM A
ORDER BY A.Name

现在还不清楚这是一个SQL问题还是一个LINQ(-To SQL)问题,或者其他什么问题,因为您已经标记了all(但不是dbms)。我相信您正在寻找的是分组。您能显示您拥有的数据和您排除的数据吗?您好,请参阅编辑-使用sql Server您应该使用标准的ANSI连接语法
,从A上的内部连接B开始。No=B。B上的内部连接C。No=C。No
事实上,所有重要的是名称值和编号值。其他一切都可以省略,因为它不会显示在选择栏中。我想你是说a和c之间是1比1,但a和b之间是1比5。那么对于一个模型中的每一个否定,当有多个蜜蜂时,你想展示什么呢?Sql不太擅长将字符串转换为类似role1、role2,。。。因此,一个选项是查看最小卷、最大卷和角色数。请参阅基于此修改的答案。