创建一个查询,让结果在另一列中显示。

3

i have a table like this :

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

我的目标是使任何一个想要汇报的人,例如:Nick介绍了Mark、David和Mat,都能够使用Access作为数据库。感谢大家!


哪个关系型数据库管理系统?SQL-ServerMySQL还是其他? - Arulkumar
根据您的样本数据,您有一些答案。我想知道Nick和Robert是否也在表中具有自己的ID?即,referredId是同一表中其他人的ID吗?如果是这种情况,您可能会有替代答案。 - Rob White
我使用 Access 2003。 - user334681
有一张表,包含以下字段:id - 名称 - 推荐人id - 推荐人姓名。 - user334681
4个回答

1
SQL Server实例。(可能有更有效的方法,但是只要有一种方法就可以了)
SELECT  distinct
        referred_id,
        referred_name,

        STUFF((SELECT ', ' + data1.[name] 
        FROM tablename data1
        WHERE data1.referred_id = data.referred_id
        FOR XML PATH('')), 1, 1, '') [refers (name of refers)]


FROM    tablename data

如果适用,重命名您的表和别名。在您的示例中,id列与您想要的结果不匹配。

提供者:

https://www.mssqltips.com/sqlservertip/2914/rolling-up-multiple-rows-into-a-single-row-and-column-for-sql-server-data/


1

由于您没有提及使用哪种关系型数据库管理系统,我将为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

工作演示: http://rextester.com/ICC58106

更新:

如果您想要将结果获取到特定的referred_user,则需要在GROUP BY之前添加WHERE子句:

WHERE referred_name = 'nick'

抱歉,您能编写与 Access 兼容的查询吗?谢谢 - user334681

0
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

0

谢谢Rob White,但我使用Access 2003作为数据库并使用VB6。VB6无法识别“ConcatRelated”,我该怎么办?是否有其他查询方式可以实现我的目标? - user334681
我所了解的一切都表明查询不是一种可选项,但也并非我已阅读了每一页网上内容,所以谁知道呢。我建议按原样提取数据,然后使用 vb 构建所需的结果。根据数据的大小,可能会很慢且难以处理,但这取决于您的判断。 - Rob White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接