2016-09-17 3 views
1

私は2つのテーブル(フライトの詳細)、(便の日付)C#で表示するために2つのテーブルを新しいテーブルに結合する方法は?

券を持って

id | callsign | type 
1 |  BAW240 | A370 
2 |  AAL767 | B777 
3 |  JTE201 | A320 

日付

ID |  date 
1 |  10/10/2016 
1 |  10/12/2016 
1 |  10/14/2016 
1 |  10/15/2016 
2 |  11/25/2016 
2 |  11/29/2016 
3 |  10/20/2016 
3 |  10/21/2016 
3 |  10/22/2016 

私はこの

のような2つのテーブルを結合したいです
id | callsign | type | dates 
1 |  BAW240 | A370 | 10/10/2016 , 10/12/2016 , 10/14/2016 , 10/15/2016 
2 |  AAL767 | B777 | 11/25/2016 , 11/29/2016 
3 |  JTE201 | A320 | 10/20/2016 , 10/21/2016 , 10/22/2016 

この最終表はプレビュー用で、ユーザーに日付の要約を表示させます。
これをどのように達成できますか?

答えて

2
Select A.* 
     ,Dates=B.Dates 
From Flights A 
Cross Apply (Select Dates=Stuff((Select Distinct ',' + cast(Date as varchar(25)) 
       From Dates 
       Where ID=A.ID 
       For XML Path ('')),1,1,'') 
       ) B 

戻り

id callsign type Dates 
1 BAW240  A370 2016-10-10,2016-10-12,2016-10-14,2016-10-15 
2 AAL767  B777 2016-11-25,2016-11-29 
3 JTE201  A320 2016-10-20,2016-10-21,2016-10-22 
+0

おかげでそんなに、優秀働きました –

2

レシートに関連付けられた複数の請求書を一覧表示するために、この手法を何度も使用しました。

USE AdventureWorks2008R2 
SELECT CAT.id, CAT.callsign, CAT.type, 
      STUFF((SELECT ',' + SUB.dates AS [text()] 
         — Add a comma (,) before each value 
         FROM Dates SUB 
         WHERE 
         SUB.flightid= CAT.id 
         FOR XML PATH('') — Select it as XML 
         ), 1, 1, '') 
         — This is done to remove the first character (,) 
         — from the result 
      AS dates 
FROM Flights CAT 

出典: https://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/

関連する問題