2013-04-23 2 views
1

У меня есть таблица: ИмяSQL запроса для ниже шаблона

Когда я делаю: SELECT * FROM имени, это дает результаты, как:

Name 
====== 
aaa 
bbb 
ccc 
sss 

Я хочу, чтобы результат будет как только в одном ряду:

Name 
==== 
aaa bbb ccc sss 

Как это получить?

+0

Это результаты, которые вы хотите от запроса, или окончательных данных вы хотите работать. Я не уверен, что вы можете просто добавить каждое имя в одно поле, и я сомневаюсь, что он вернет одну строку с кратным одним и тем же полем (например, имя, имя, имя) ... какова ваша цель для этих данных. – Silvertiger

+0

Требование - поддерживать некоторый старый шаблон. – James

ответ

3

Попробуйте один -

DECLARE @temp TABLE 
(
     col NVARCHAR(50) 
) 

INSERT INTO @temp (col) 
VALUES 
    ('aaa'), 
    ('bbb'), 
    ('ccc'), 
    ('sss') 

SELECT str_string = (
    SELECT col + ' ' 
    FROM @temp 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 

Или попробуйте это -

DECLARE @string NVARCHAR(MAX) = '' 

SELECT @string = @string + col + ' ' 
FROM @temp 

SELECT @string 
2

Пожалуйста, попробуйте:

SELECT 
    (SELECT ColumnName + ' ' 
    FROM YourTable 
    FOR XML PATH(''),type).value('.','nvarchar(max)') AS [Name] 
0

Может быть более-толкая пудинг для вашего требования, но агрегат CLR функция конкатенации строк в отдельные значения - очень удобная вещь для вашего инструментария. Что-то вроде ниже. В моем опыте работает намного быстрее, чем xml, и поддерживает GROUP BY и т. Д., Так что он достаточно мощный. Работает только в SQL2k8 или выше и взорвется, если конкатенирует строку до 2 ГБ.

[Serializable] 
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = -1)] 
public struct Concatenate : IBinarySerialize 
{ 
public string concat; 
public string delimiter; 

public void Init() 
{ 
    this.concat = ""; 
} 

public void Accumulate(SqlString text, SqlString delim) 
{ 
    if (!text.IsNull) 
    { 
     concat += (string)text + (string)delim; 
    } 
    delimiter = (string)delim; 
} 

public void Merge(Concatenate Group) 
{ 
    concat += (string)Group.concat + (string)Group.delimiter; 
    delimiter = (string)Group.delimiter; 
} 

public SqlString Terminate() 
{ 
    return concat.Substring(0, concat.Length - delimiter.Length); 
} 

public void Read(BinaryReader r) 
{ 
    delimiter = r.ReadString(); 
    concat = r.ReadString(); 
} 

public void Write(BinaryWriter w) 
{ 
    w.Write(delimiter); 
    w.Write(concat); 
} 

}

Смежные вопросы