我有一个visitor
表,如下所示:
VID Name Address DOB
001 Bob 101 St 03/05/2001
002 James 505 Rd 02/06/1985
003 Jill 201 Place 04/06/1970
和visits
表格看起来像这样:
VID Date Reason
001 05/07/2012 Family
001 06/01/2012 Family
003 03/02/2011 Other
我想在VID(我已经做过)上对这两者进行连接查询,但也让查询显示访问的所有(多个)结果。结果如下:
Name DOB Visits
Bob 03/05/2001 05/07/2012 Family, 06/01/2012 Family
James 02/06/1985
Jill 04/06/1970 03/02/2011 Other
这可能吗?我尝试了一个子查询,如:
SELECT Name,DOB,(选择日期,原因FROM访问AS H WHERE H.VID = visitor.VID)作为来访者访问;
但这给了我明显的Subquery returned more than 1 value
错误。数据将由PHP解析,但我希望在一个查询中完成此任务。
答案 0 :(得分:4)
您可以使用FOR XML PATH
构造将结果连接到一列
SELECT Name
, DOB
, STUFF((SELECT ', '
+ CONVERT(VARCHAR(16), H.Date, 101)
+ ' '
+ H.Reason
FROM visits AS H
WHERE H.VID = visitor.VID
FOR XML PATH('')), 1, 2, '')
FROM visitor;
请注意,转换支持各种日期格式。我在示例中使用101
转换为mm/dd/yyyy
。
查看转化支持的所有样式的MSDN。
答案 1 :(得分:1)
你必须加入这两个表,然后在php中进行处理。所以
选择a.Name,a.DOB,b.Date,b.Reason FROM visitor a,访问b,其中a.VID = b.VID顺序为1,2;
然后,您只需要遍历记录并在前两列中的一列发生变化时开始一个新行。