2016-09-09 12 views
0

2つのテーブルを使用して最初のビューを取得した後、GROUP_CONCATを1つの列に作成したいが、この機能はSQL Serverにはない。複数の行をSQL​​ Serverの動的テーブルに連結

ここでいくつかの例を試しましたが、私のSQLではうまくいかなかったのです。例では、常にテーブルを使用してGROUP_CONCATを生成していますが、SQLの結果は表示されませんでした。

TableAの

| CityID | MasterID | Account | 
+-----------------------------+ 
| 01 | 1234 | 1111 | 
| 01 | 1234 | 2222 | 
| 01 | 1234 | 3333 | 
| 02 | 1234 | 4444 | 

TableBの

| Account | Item | Price | 
+------------------------+ 
| 1111 | A001 | 11,11 | 
| 2222 | A001 | 11,11 | 
| 3333 | A002 | 22,22 | 
| 4444 | A002 | 22,22 | 
| 5555 | A002 | 22,22 | 

まずSQL - 副選択:

SELECT * 
FROM TableA, TableB 
WHERE TableA.AccountID = TableB.AccountID 

出力:

| CityID | MasterID | Account | Account | Item | Price | 
+------------------------------------------------------+ 
| 01 | 1234 | 1111 | 1111 | A0001 | 11,11 | 
| 01 | 1234 | 2222 | 2222 | A0001 | 11,11 | 
| 01 | 1234 | 3333 | 3333 | A0002 | 22,22 | 
| 02 | 1234 | 4444 | 4444 | A0002 | 22,22 | 

セカンドSQL - 最終ビュー:

SELECT 
    MasterID, GROUP_CONCAT(Item) 
FROM 
    (SELECT * 
    FROM TableA, TableB 
    WHERE TableA.AccountID = TableB.AccountID) table01 

出力:それはあなたが言及したものだとして

| MasterID | Item | 
+-----------------+ 
| 1234 | A0001,A002 | 
+0

[古いスタイルのJOINを使用する](http://sqlblog.com/blogs/a古いスタイルの*カンマで区切られたテーブルのスタイルのリストが*適切な* ANSIに置き換えられていることを示しています(aron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) ANSI - ** 92 ** SQL標準(** 20年以上前**)の 'JOIN'構文とその使用はお勧めしません –

答えて

0

これはあなたに期待される結果が得られます(私は列名ではなくたAccountIdとしてアカウントを使用していますテーブル構造で)

;WITH table01 
AS 
(
    SELECT A.CityId,A.MasterId,A.Account Account1,B.Account Account2,B.Item,B.Price 
    FROM TableA A 
    INNER JOIN TableB B 
    ON A.Account = B.Account 
) 

SELECT A.MasterId, 
STUFF((SELECT ', ' + B.ITEM 
     FROM table01 B 
     WHERE B.MasterId = A.MasterId 
     group by B.MasterId,B.Item 
     FOR XML PATH('') 
    ), 1, 2, '') Item 

FROM table01 A 
GROUP BY A.MasterId 
関連する問題