创建一个在另一列中显示结果的查询

时间:2017-05-23 13:19:23

标签: 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_name,l_name,active_status,refered_by From Act_Reg where refered_by='nick'

查询效果很好并返回:

id - name
1  - mark
2  - david
3  - mat

现在,我想在网格中显示行和coloumn的结果:像这样

id - referred_id - referred_name - refers(name of refers)
1  -  100        - nick          - mark , david , mat
2  -  101        - robert        - patrik , mick

我的目标是任何引入报告的人,例如: 尼克介绍了马克,大卫,垫子 我使用访问作为数据库,感谢所有

4 个答案:

答案 0 :(得分: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 :(得分:1)

由于您没有提及哪个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

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

<强>更新

如果您想将结果提供给特定的referenced_user,则需要在WHERE之前添加GROUP BY子句:

WHERE referred_name = 'nick'

答案 2 :(得分: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

答案 3 :(得分:0)

访问答案。感谢Combine values from related rows into a single concatenated string value

SQL:

SELECT distinct
i.[referred_name],
ConcatRelated(
    "[name]",
    "names",
"[referred_name] = '" & [referred_name] & "'") AS Names
FROM [names] AS i;

创建一个模块并粘贴ConcatRelated Method,该方法在提供的链接中提到。 http://allenbrowne.com/func-concat.html

我已经对2002-2003访问进行了测试并且可以正常运行。