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
我的目标是任何引入报告的人,例如: 尼克介绍了马克,大卫,垫子 我使用访问作为数据库,感谢所有
答案 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列不符合您想要的结果。
礼貌
答案 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访问进行了测试并且可以正常运行。