2017-07-04 18 views
0

私はSTUFFで次のことを実行しようとしていましたが、私は何か考えています。SQL Serverの結果を1行に連結する

私は、フォーム

DATE  | CLIENT_ID | ITEM_DESC 
2017-02-01 | 12  | GLOVES 
2017-02-01 | 12  | HAT 
2017-02-01 | 12  | SHOES 
2017-02-01 | 25  | GLOVES 

に結合されたテーブルから結果を返すクエリを持っていると私は1つの行にITEM_DESCを組み合わせることで、これを減らしたい:

DATE  | CLIENT_ID | ITEM_DESC 
2017-02-01 | 12  | GLOVES, HAT, SHOES 
2017-02-01 | 25  | GLOVES 

私がしようとしています返された結果に対してネストされたクエリを実行します。

select [Date] as PurDate, [client_ID], 
AllDetails = 
STUFF (
    (select ', ' + Details FOR XML PATH ('')), 1, 1, '' 
) 
from (select... 

しかし、エスコート。私は最初の2つの列をグループ化し、その組み合わせに共通するものだけを連結する必要がありますが、それは私が立ち往生している場所です。

答えて

1

あなたは以下のように最後にして、グループを追加する必要があります:あなたのサンプルデータを使用して作成

select [Date] as PurDate, [client_ID], 
AllDetails = 
STUFF (
    (select ', ' + Details FOR XML PATH ('')), 1, 1, '' 
) 
from (select... 
) a 
group by [Date], [Client_Id] 

、あなたは以下のように問い合わせることができます:

Select [Date], Client_id, 
    Stuff((Select ','+Item_desc from #alldata where [Date] = a.[Date] and [Client_id] = a.Client_id for xml path('')), 1,1,'') 
    from #alldata a 
    group by [Date], Client_id 

入力テーブルを:

create table #alldata ([Date] date, Client_id int, Item_desc varchar(15)) 

insert into #alldata([date], Client_id, Item_desc) values 
('2017-02-01', 12 ,'GLOVES') 
,('2017-02-01', 12 ,'HAT') 
,('2017-02-01', 12 ,'SHOES') 
,('2017-02-01', 25 ,'GLOVES') 

以下のように出力します。

+------------+-----------+---------------------+ 
| Date | Client_id |  Item_Desc  | 
+------------+-----------+---------------------+ 
| 2017-02-01 |  12 | GLOVES, HAT, SHOES | 
| 2017-02-01 |  25 | GLOVES    | 
+------------+-----------+---------------------+ 
+0

コマンドによるグループ化では、詳細と他の2つのフィールドをグループ化する必要があり、結果はまったく同じです.3つの列を含む完全なテーブル – pickarooney

+0

回答の更新クエリ –

+0

完璧!私はselect/insertの前にtempテーブルを必要としました。selectの結果を使うのではなく...)。 多くのありがとう:) – pickarooney

関連する問題