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でこれら2つの間で結合クエリを実行したいのですが(すでに実行しました)、クエリに訪問からのすべての(複数の)結果を表示させます。したがって、結果は次のようになります。

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によって解析されますが、私はこれを1つのクエリで実行したいと考えていました。

4

2 に答える 2

4

FOR XML PATHコンストラクトを使用して、結果を 1 つの列に連結できます

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;

convert では、さまざまな日付形式がサポートされていることに注意してください。101に変換される例で使用しましたmm/dd/yyyy

convert でサポートされているすべてのスタイルについては、 MSDNを参照してください。

于 2012-06-21T18:12:41.183 に答える
1

2 つのテーブルを結合してから、php で処理を行う必要があります。そう

SELECT a.Name, a.DOB, b.Date, b.Reason FROM visit a, visits b where a.VID=b.VID order by 1,2 ;

次に、最初の 2 つの列のいずれかが変更されるたびに、レコードを調べて新しい行を開始するだけです。

于 2012-06-21T18:17:02.123 に答える