如何结合两个内部联接的SQL查询中的行?

时间:2019-06-18 06:41:03

标签: sql-server

在我的SQL Server 2014中,我有3个表。在一个表中是用户信息,在另一个表中是用户信息,在第三个表中是用户和组的依赖关系。

我刚刚设置了查询,但结果却不是我想要的那样。 就像我最近的问题Combine lines in sql query一样,我想尝试获得类似的结果

Result from my query

这是我服务器上的查询:

SELECT server01.customer05.user.id, server01.customer05.user.namename, server01.customer05.groups.name FROM server01.customer05.username

INNER JOIN customer05.bgrel ON server01.customer05.id=server01.customer05.bgrel.username_id
INNER JOIN customer05.groups ON customer05.groups.id=customer05.bgrel.groups_id

WHERE server01.customer05.username != 'ANONYMOUS' and server01.customer05.username != 'INST_ROOT' and server01.customer05.username != 'SERVER_ROOT_3'

ORDER BY username

2 个答案:

答案 0 :(得分:1)

您可以按<template v-if="inputCurrentObject.type === 'string' "> <Integer :input="inputCurrentObject.value" /> </template> ID对表进行分组,然后使用user函数将STUFF作为逗号分隔值

首先让我们建立一个与您的问题的样本数据相匹配的测试表。

group

现在我们可以像这样查询不同的ID和用户

declare @t table (ID int, [user] varchar(10), [group] varchar(10))
insert into @t (ID, [user], [group])
values (1, 'max', 'g1'),
       (1, 'max', 'admin'),
       (2, 'tom', 'g2'),
       (3, 'jan', 'g1'),
       (3, 'jan', 'k1'),
       (3, 'jan', 'o1')

这将给我们

select t.ID,
       t.[user]
from   @t t
group by t.ID, t.[user]

现在我们需要做的是将组作为每行的逗号分隔值,并且我们可以使用stst函数来完成。

ID  user    
1   max     
2   Tom     
3   Jan     

结果将是

select t.ID,
       t.[user],
       stuff( (select ',' + t2.[group] from @t t2 where t2.ID = t.ID for XML path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, '') as [group]  
from   @t t
group by t.ID, t.[user]

查看您的查询,我认为您可以像这样实现它。由于我没有您的数据库,因此我无法进行脱轨测试。

ID  user    group
1   max     Admin,g1
2   Tom     g2
3   Jan     g1,K1,O1

答案 1 :(得分:0)

使用SQL Server资料-

WITH CTE (ID, [user],[ group])
AS
(
    SELECT 1,'max', 'g1' UNION ALL
    SELECT 1,'max', 'Admin' UNION ALL
    SELECT 2,'Tom', 'g2' UNION ALL
    SELECT 3,'Jan', 'g1' UNION ALL
    SELECT 3,'Jan', 'K1' UNION ALL
    SELECT 3,'Jan', 'O1'

    -- Above, you need to replace SELECT statements
    -- with your SELECT statement from which you are 
    -- Getting the first table output 
)
SELECT DISTINCT B.ID,B.[user],
STUFF((SELECT DISTINCT  ',' + A.[ group] FROM CTE A WHERE A.ID = B.ID FOR XML     PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') [Group]  
FROM CTE B

输出为-

ID  user    Group
1   max     Admin,g1
2   Tom     g2
3   Jan     g1,K1,O1