2

我有一个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, (SELECT Date, Reason FROM visits AS H WHERE H.VID=visitor.VID) As Visits FROM visitor;

但这给了我明显的Subquery returned more than 1 value错误。数据将由 PHP 解析,但我希望在一个查询中完成此操作。

4

2 回答 2

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以了解 convert 支持的所有样式。

于 2012-06-21T18:12:41.183 回答
1

您必须加入这两个表,然后在 php.ini 中进行处理。所以

SELECT a.Name, a.DOB, b.Date, b.Reason FROM visitor a, 访问 b where a.VID=b.VID order by 1,2 ;

然后,您只需浏览记录并在前两列之一发生更改时开始新行。

于 2012-06-21T18:17:02.123 回答