2012-03-19 4 views
0

こんにちは親愛なるすべての私の友人は、SQLクロスタブ機能

私は、function.Currently SQLクロスタブについての一つのことをお聞きしたい私は、SQL 2008 Expressのバージョンを使用していますし、私のテーブル構造は以下のようなものです。

UserID  Str_Value 
1    A 
1    B 
1    C 
2    A 
2    B 
3    D 
3    E 

私はこのようになりたいです。

UserID  Str_Value 
1    A,B,C 
2    A,B 
3    D,E 

私はカーソルを使用したくありません。その機能はありますか?
私に正しい方法を教えてください。本当に感謝しています。

ありがとうございました。

よろしく、

チョン

+2

としてはnvarchar(500)サイズを設定していない場合、これは[のタグSQLサーバおよびグループ化連結 – Lamak

+2

可能重複してクイック検索を行い、多くの多くの時間を頼まれていORDER BY T1.Str_ValueコメントすることができますMS SQL Server 2005でのgroup_concatのMySQL機能のシミュレーション?](http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-ms-sql-server-2005) – Lamak

答えて

3

は、この情報がお役に立てば幸いです。あなたは、必要に応じて、必要な

SELECT DISTINCT T1.UserId, 
Stuff(
     (SELECT N', ' + T2.Str_Value 
     FROM t T2 
     WHERE T2.userId = T1.userid 
     ORDER BY T2.Str_Value 
     FOR XML PATH(''),TYPE).value('text()[1]','nvarchar(500)'),1,2,N'') 
     AS Str_Value 
FROM t T1 
3
SELECT UserId, LEFT(Str_Value, LEN(Str_Value) - 1) AS Str_Value 
FROM YourTable AS extern 
CROSS APPLY 
(
    SELECT Str_Value + ',' 
    FROM YourTable AS intern 
    WHERE extern.UserId = intern.UserId 
    FOR XML PATH('') 
) pre_trimmed (Str_Value) 
GROUP BY UserId, Str_Value 
1

はこれを試してみてください:

SELECT DISTINCT 
    t1.UserID, 
    Values = SUBSTRING((SELECT (', ' + t2.Str_Value) 
        FROM dbo.Users t2 

        ORDER BY 
         t2.Str_Value 
        FOR XML PATH('') 
       ), 3, 4000)FROM dbo.Users t1 
GROUP BY t1.UserID 
+0

'stuff(str、 1,1、 '') 'の代わりに' substring' –

0
create table #temp 
(
    userid int, 
    str_value varchar(1) 
) 

insert into #temp values (1, 'A') 
insert into #temp values (1, 'B') 
insert into #temp values (1, 'C') 

insert into #temp values (2, 'A') 
insert into #temp values (2, 'B') 

insert into #temp values (3, 'D') 
insert into #temp values (3, 'E') 

select userid, left(x.str_value, len(x.str_value) -1) as str_value 
from #temp t 
cross apply 
(
    select str_value + ',' 
    FROM #temp t1 
    where t.userid = t1.userid 
    for xml path('') 
) x (str_value) 
group by userid, x.str_value 

drop table #temp