2010-03-02 23 views
7

Possible Duplicate:
SQL Server: Can I Comma Delimit Multiple Rows Into One Column?virgülle ayrılmış değerler tek bir hatta sorgu sonucunu Üyelik

Böyle bir sorgu var:

1 user1 
2 user2 
3 user3 

:

SELECT name from users 

ve bu hataların nedeni kayıtların bir sayıdır Tüm bu kayıtları virgülle ayrılmış tek bir satırda almak istiyorum:

Sorgu sonucu boşsa

ve boş bir satır.

T-SQL nasıl kullanılır? UNPIVOT?

+1

@OMG: DOS kabuğuna görüntülenen cevaplar çok farklı olduğu için Katılmıyorum – abatishchev

cevap

17

Sen bunu başarmak için BIRLEŞIM işlevini kullanabilirsiniz: Bu (çok muhtemelen önceki sürümleri) daha sonra sql server 2000'de çalışacak ve

declare @result varchar(max) 

select @result = COALESCE(@result + ', ', '') + name 
from users 

select @result 

. Yine de sql server 2000'de varchar (max) olmadığınızı unutmayın. sql server sonraki sürümlerinde (daha sonra 2005) yılında

, kullanarak XML Path()

select name + ',' 
from users 
for xml path('') 
+0

@David Hall: İlkini beğendim. İkincisi, ne yazık ki sonuncusu için her bir kaydın sonuna bir virgül ekler. – abatishchev

+1

@abatishchev bunu faydalı buldu. Bu gönderiye bir göz atın http://msmvps.com/blogs/robfarley/archive/2007/04/08/coalesce-is-not-the-answer-to-string-concatentation-in-t-sql.aspx Büyük sonuç kümeleri için xml yol yönteminin daha iyi olduğunu görebilirsiniz. –

+0

Sadece belirli miktarda veri olduğunda bu kolaydır. Ancak, verilerin yalnızca bir kısmını istiyorsanız, sadece "user1 ve user2" deyin - bu hatayla başarısız olur: ** Subquery, 1'den fazla değer döndürdü. Alt sorgu, =,! =, <, <= , >,> = veya alt sorgu bir ifade olarak kullanıldığında bu izin verilmez. ** –

0
declare @result varchar(max) 
set @result = '' 
select @result = @result + name + ',' from users 
if @result <> '' set @result = left(@result,len(@result)-1) 
print @result 
+0

@DyingCactus: 'kullanıcı1, kullanıcı2, kullanıcı3 ... usern' olabilir gibi yinelemeli böylece ortaya çıkan dize döngüsünde diyoruz nasıl dışarı gel – abatishchev

+0

Dize virgül olmadan almak nasıl demek istiyorsun bir ifadeyle bitirmek David Hall'un cevabı bunu yapacak. – DyingCactus

1

Tüm bu güzel zaman onun biçimlendirilmemiş dışında da böyledir bunu yapabilir yapmak da mümkündür

echo Batch file SQL 2005 
echo. 
"%PROGRAMFILES%\Microsoft SQL Server\90\Tools\BINN\osql" -S . -E -Q "SELECT name + ', ' FROM sysdatabases order by name for XML PATH('')" 
İlgili konular