Sql 进行查询,在另一列中显示结果

Sql 进行查询,在另一列中显示结果,sql,vb6,Sql,Vb6,我有一张这样的桌子: id - name - referred_id - referred_name 1 - mark - 100 - nick 2 - david- 100 - nick 3 - mat - 100 - nick 4 - patrik- 101 - robert 5 - mick - 101 - robert 我使用此查询显示引用名称的结果: SELECT member_id,f_na

我有一张这样的桌子:

id - name - referred_id - referred_name
1  - mark -   100  -      nick
2  - david-   100  -      nick 
3  - mat -    100  -      nick
4  - patrik-  101  -      robert
5  - mick -   101  -      robert
我使用此查询显示引用名称的结果:

SELECT member_id,f_name,l_name,active_status,refered_by From Act_Reg where refered_by='nick'
查询工作正常,返回:

id - name
1  - mark
2  - david
3  - mat
现在,我想在网格中以行和列的形式显示结果:如下所示

id - referred_id - referred_name - refers(name of refers)
1  -  100        - nick          - mark , david , mat
2  -  101        - robert        - patrik , mick
我的目标是,介绍as report的任何人,例如: 尼克介绍了马克、大卫和马特 我使用access作为数据库,感谢所有SQL Server的立场。(可能有一种更有效的方法,但方法是一样的)

在适用的情况下重命名表和别名。示例中的id列与所需结果不符

承蒙


由于您没有提到哪个RDBMS,我将为SQL Server提供解决方案:

SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Id, 
       referred_id, 
       referred_name, 
       STUFF((SELECT ', ' + CAST(name AS VARCHAR(10)) [n]
         FROM TestTable 
         WHERE referred_id = t.referred_id
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') name
FROM TestTable t
GROUP BY referred_id, referred_name;
输出:

Id  referred_id     referred_name   name
1   100             nick            mark, david, mat
2   101             robert          patrik, mick
工作演示:

更新:

如果您希望将结果发送给特定的参考用户,则需要在
分组依据
之前添加
WHERE
子句:

WHERE referred_name = 'nick'
访问答案。多亏了

SQL:

创建一个模块并粘贴到所提供链接中提到的相关方法中


我已经在access 2002-2003上进行了测试,可以正常工作。

哪种RDBMS
SQL Server
MySQL
或其他?基于示例数据,您有一些答案。我想知道尼克和罗伯特是否也有自己的身份证?例如,referedID是同一表中其他人的id?如果是这种情况,您可能会有其他答案I use access 2003这里有一个带有以下字段的表:id-name-referenced\u id-referenced\u nameSorry,您能将查询写入与access兼容的目录吗?谢谢Rob White,但我使用access 2003作为数据库,并使用vb6.vb6不识别“相关”,我该怎么办?有没有办法通过另一个查询来达到我的目标?我所研究的一切都表明,查询不是一个选项,但我并不是在网上阅读每一页,所以谁知道呢。我建议按原样提取数据,然后使用vb生成所需的结果。取决于数据的大小,它可能会很慢并且不可行,但这是由您自行决定的。
WHERE referred_name = 'nick'
SELECT
    referred_id
    ,referred_name
    ,(
        SELECT SUBSTRING((
            SELECT 
                ', ' + NAME
            FROM Act_Reg 
            WHERE REFERRED_ID = A.REFERRED_ID        
            FOR XML PATH('')),
        3,1000)
    ) [REFERS [NAME OF REFERES]
FROM Act_Reg A
-- INSERT WHERE CLAUSE HERE, IF NEEDED
GROUP BY referred_id, referred_name
SELECT distinct
i.[referred_name],
ConcatRelated(
    "[name]",
    "names",
"[referred_name] = '" & [referred_name] & "'") AS Names
FROM [names] AS i;