我有一个像这样的访问表
ID | UserName | CarBrand
-------------------------
0 Peter VW
1 Peter Ferrari
2 Mike Audi
3 Peter Dodge
4 Heidi BMW
5 Heidi Ford
我需要CarBrand
字段中的名称作为报告的逗号分隔列表。
有没有办法(没有VB,可能使用COALESCE替代?)创建一个逗号分隔的字符串,没有Name:
部分?
Peter: VW, Ferrari, Dodge
Mike: Audi
Heidi: BMW, Ford
因为它是一个报告,还有其他方法可以做到这一点,也许在报告中使用表达式?
答案 0 :(得分:7)
你不能这样做是没有VBA的Access。 Coalesce不存在,但您可以编写具有某些功能的UDF,例如http://allenbrowne.com/func-concat.html 但是,一旦使用UDF,查询就不再可用于Access。
答案 1 :(得分:0)
使用唯一的用户名列表创建主报告。
创建一个包含用户名列表及其汽车品牌的子报表。加入UserName上的表单。在子窗体的设计中,使用4-5列水平打印。您可以让CarBrand字段包含类似= [CarBrand]&的公式。 “,”(对不起,最后一个会有一个不必要的逗号。如果某个特定用户拥有的品牌数量超过您的报告范围,那么它们将会统一间隔并且会突破新的行(这将很难做到如果您只是创建一个以逗号分隔的大字符串。)。
根本没有涉及VBA。
答案 2 :(得分:0)
如果您不需要逗号分隔列表中的每个值,但只说前三个或前四个,那么Access中就有一个纯SQL解决方案。
我正在为一个拥有导师和班级的非营利组织工作。对于大多数班级,只有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
显然,将三列合并为1需要1个额外的步骤(未显示)。