Sql 是否从一列的多行中创建逗号分隔的字符串?
我有一个这样的访问表Sql 是否从一列的多行中创建逗号分隔的字符串?,sql,ms-access,ms-access-2003,Sql,Ms Access,Ms Access 2003,我有一个这样的访问表 ID | UserName | CarBrand ------------------------- 0 Peter VW 1 Peter Ferrari 2 Mike Audi 3 Peter Dodge 4 Heidi BMW 5 Heidi Ford 我需要CarBrand字段中的名称作为报告的逗号分隔列表 有没有一种没有VB的方法,可能使用合并替代方案?要创建这样一个
ID | UserName | CarBrand
-------------------------
0 Peter VW
1 Peter Ferrari
2 Mike Audi
3 Peter Dodge
4 Heidi BMW
5 Heidi Ford
我需要CarBrand字段中的名称作为报告的逗号分隔列表
有没有一种没有VB的方法,可能使用合并替代方案?要创建这样一个逗号分隔的字符串,而不使用名称:part
对于报告,是否有其他方法可以做到这一点,可能在报告中使用表达式 如果没有VBA,则无法执行此操作。Coalesce不存在,但您可以编写具有某些功能的UDF,例如
但是,一旦使用UDF,查询在Access之外就不再可行。创建一个具有唯一用户名列表的主报表 创建包含用户名及其汽车品牌列表的子报告。在用户名上加入表单。在子窗体的设计中,使用水平打印的4-5列。您可以让CarBrand字段包含一个公式,如=[CarBrand]&,很抱歉,最后一个字段将包含一个不必要的逗号。如果某个特定用户的品牌数量超过了您报告的数量,则它们将被均匀地隔开,并将分成新行。如果您只创建一个逗号分隔的大字符串,则很难做到这一点
根本不涉及VBA 如果不需要逗号分隔列表中的每一个值,而只需要前3个或4个左右的值,那么Access中就有一个纯SQL解决方案 我正在为一家非营利机构的DB工作,该机构有导师和课程。对于大多数班级来说,只有1到2名导师。出于显示目的,我无论如何不能列出超过2或3个,所以我不担心用5个或更多的导师截断异常值 这将为每一个具有最低导师ID的班级获取3名导师
Select JTC1.ClassID, Min(JTC1.TID1) as TutorID1,
Min(JTC1.TID2) as TutorID2,
Min(JTC1.TID3) as TutorID3
from (
Select distinct TC1.ClassID,
TC1.TutorID as TID1,
TC2.TutorID as TID2,
TC3.TutorID as TID3
from ((
Classes C
Left Join TutorClasses TC1
on C.ClassID = TC1.ClassID)
Left Join TutorClasses TC2
on TC1.ClassID = TC2.ClassID and TC1.TutorID < TC2.TutorID
)
Left Join TutorClasses TC3
on TC2.ClassID = TC3.ClassID and TC2.TutorID < TC3.TutorID
) as JTC1
Group by JTC1.ClassID
显然,要将三列合并为一列,还需要一个未显示的额外步骤。建议的表格不是第一个标准表格。考虑使用报告或其他“前端”工具进行显示。另外,考虑到在StAcExver上最多的投票是在SQL中而不是在前端进行格式化。我不认为在报告中也有一种简单的方法来实现这一点,您仍然需要使用VBA函数。
Select JTC1.ClassID, Min(JTC1.TID1) as TutorID1,
Min(JTC1.TID2) as TutorID2,
Min(JTC1.TID3) as TutorID3
from (
Select distinct TC1.ClassID,
TC1.TutorID as TID1,
TC2.TutorID as TID2,
TC3.TutorID as TID3
from ((
Classes C
Left Join TutorClasses TC1
on C.ClassID = TC1.ClassID)
Left Join TutorClasses TC2
on TC1.ClassID = TC2.ClassID and TC1.TutorID < TC2.TutorID
)
Left Join TutorClasses TC3
on TC2.ClassID = TC3.ClassID and TC2.TutorID < TC3.TutorID
) as JTC1
Group by JTC1.ClassID