2017-08-30 73 views
0

我需要使用连接或通过其他方式从表中的两行中取出单行。我有三个表Account,Account_Perm和User。帐户表具有一个名为AccountNum的字段,Account_Perm具有AccountNum,TeamRole和UserName的字段,用户表具有用户名。示例数据如下。在SQL Server中连接从表的两行中获取单行

  • 帐户==> AccountNum = 1234,5678
  • Account_Perm ==> AccountNum = 1234,TeamRole = TeamA; AccountNum = 1234,TeamRole = TeamB
  • User ==> TeamRole = TeamA,UserName = John Smith; TeamRole = TeamB,UserName =“凯西布朗”。

我需要使用这些表和我的结果集与列(AccountNum,TeamRole,TeamRole)应该如下。

1234, John Smith, Casey Brown 

通过使用加入,我能得到两行,1234,约翰·史密斯和1234,凯西·布朗。不过,我需要AccountNum,TeamA的用户名和TeamB的用户名单独记录。

有人可以帮忙吗?

查询:

SELECT 
    A.AccountNum, 
    A.TeamRole, 
    U.Name 
FROM 
    Account A, 
    Account_Perm AA, 
    User U 
WHERE 
    A.AccountNum = AA.AccountNum 
    AND AA.TeamRole IN ('TeamA', 'TeamB') 
    AND AA.UserName = U.Name; 
+0

'使用Join' ......请注明您目前的查询。您的数据非常难以阅读和理解。 –

+0


选择A.AccountNum,A.TeamRole,U.Name 从账户A,Account_Perm AA,用户u WHERE \t A.AccountNum = AA.AccountNum AND \t \t AA.TeamRole IN( 'TeamA', 'TeamB' ) AND \t \t AA.UserName = U.Name –

+2

您的数据和问题不清楚,甚至我甚至无法猜测答案。执行以下操作:_编辑_问题以表格形式显示示例数据,就像SQL查询返回一样,然后2)用示例结果显示示例输出表。你应该意识到,如果你一开始就这样做了,你可能已经有了答案。 –

回答

0
declare @Account table(AccountNum int); 
insert into @Account values (1234), (5678); 

declare @Account_Perm table (AccountNum int, TeamRole varchar(100)) 
insert into @Account_Perm values(1234, 'TeamA'), (1234, 'TeamB'); 

declare @User table (TeamRole varchar(100), UserName varchar(100)); 
insert into @User values ('TeamA', 'John Smith'), ('TeamB','Casey Brown'); 

--AccountNum, TeamRole, TeamRole) should be as below. 
--1234, John Smith, Casey Brown 
with cte AS 
(
SELECT 
    A.AccountNum, 
    AA.TeamRole, 
    U.UserName 
FROM 
    @Account A join @Account_Perm AA 
     on A.AccountNum = AA.AccountNum 
    join @User U 
     on AA.TeamRole = U.TeamRole 
WHERE AA.TeamRole IN ('TeamA', 'TeamB') 
) 

select * 
from cte pivot(max(UserName) for TeamRole in ([TeamA], [TeamB]))p 
+0

你的解决方案似乎很好。谢谢你的帮助。一件小事。如果某个帐户没有TeamA的行,则与TeamA对应的用户名将填充为NULL。有没有办法让它变成空白? –

+0

没关系。我通过将ISNULL子句添加到select中来实现它。 –