我有一個表:名稱用於以下模式的SQL查詢
當我做:SELECT * FROM名稱,它給出的結果爲:
Name
======
aaa
bbb
ccc
sss
我想要的結果是如僅在一行中:
Name
====
aaa bbb ccc sss
我該如何得到這個?
我有一個表:名稱用於以下模式的SQL查詢
當我做:SELECT * FROM名稱,它給出的結果爲:
Name
======
aaa
bbb
ccc
sss
我想要的結果是如僅在一行中:
Name
====
aaa bbb ccc sss
我該如何得到這個?
嘗試這一個 -
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
請嘗試:
SELECT
(SELECT ColumnName + ' '
FROM YourTable
FOR XML PATH(''),type).value('.','nvarchar(max)') AS [Name]
可能過度慫恿布丁的要求,但一個CLR聚合將行連接成單個值的函數在您的工具箱中非常方便。像下面的東西。根據我的經驗,運行速度比xml快得多,並支持GROUP BY等,因此功能非常強大。只適用於SQL2k8或更高版本,如果連接超過2GB的字符串,將會炸燬。
[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);
}
}
這是導致你的查詢,或者你想與之合作的最終數據要。我不確定你是否可以將每個名字追加到一個字段中,我懷疑它會返回一行與同一字段的多個字段(即名稱,名稱,名稱)......您對此數據的目的是什麼。 – Silvertiger 2013-04-23 10:46:06
需求是支持一些舊模式.. – James 2013-04-23 10:48:45