在T-SQL中输出一个以逗号分隔的列表
答
看到我的回答从这个question。在这个问题中还有其他几种方法可以做到这一点。尽管如此,COALESCE或xml路径应该可以做到。
编辑(添加了来自前一个问题我的答案):
CREATE FUNCTION [dbo].[fn_MyFunction]()RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @str NVARCHAR(MAX)
DECLARE @Delimiter CHAR(2)
SET @Delimiter = ', '
SELECT @str = COALESCE(@str + @Delimiter,'') + AColumn
FROM dbo.myTable
RETURN RTRIM(LTRIM(@str))
END
答
您可以创建一个UDF,会做这样的事情
CREATE FUNCTION dbo.GetBirthdays(@UserId INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @combined VARCHAR(MAX)
SELECT @combined = COALESCE(@combined + ', ' + colName + ', colName)
FROM YourTable
WHERE UserId = @UserId
ORDER BY ColName
END
基本上这只是拉的所有值进入一个简单的列表。
答
其中一些答案过于复杂并且更复杂的XML查询。我一直用这个:
select @Phones=(
Select PhoneColumn+','
From TableName
For XML Path(''))
-- Remove trailing comma if necessary
select @Phones=left(@Phones,len(@Phones)-1)
答
FWIW我创建了一个SQL CLR聚合函数。像冠军一样工作!
[序列化] [SqlUserDefinedAggregate(Format.UserDefined, 名称= “JoinStrings”, IsInvariantToNulls =真, IsInvariantToDuplicates =假, IsInvariantToOrder =假, MaxByteSize = 8000)]公共结构 JoinStrings: IBinarySerialize {0}公共字符串结果;
public void Init() { Result = ""; } public void Accumulate(SqlString value) { if (value.IsNull) return; Result += value.Value + ","; } public void Merge(JoinStrings Group) { Result += Group.Result; } public SqlString Terminate() { return new SqlString(Result.ToString().Trim(new
char [] {','})); }
public void Read(System.IO.BinaryReader r) { Result = r.ReadString(); } public void Write(System.IO.BinaryWriter w) { w.Write(Result.ToString()); } }
然后我就可以这样使用它:
SELECT dbo.JoinStrings(Phone) FROM Phones Where UserID = XXX
答
假设你有其中有一个唯一的ID,并命名为多个电话号码PHONENUMBERS为每一个客户共享的另一表中的客户表客户ID字段作为外键,这将使用相关的子查询
Select C.ID, C.FirstName, C.LastName,
(select (STUFF((SELECT ', ' + PhoneNumber from PhoneNumbers P where P.CID = C.ID
FOR XML PATH('')), 1, 2, ''))) as PhoneNumbers
from Customers C
答
Select Unique ID, Replace(Rtrim(Ltrim(Case when [Phone_Number1] is not null Then [Phone_Number1]+' ' Else '' End +
Case when [Phone_Number2] is not null Then [Phone_Number2]+' ' Else '' End +
Case when [Phone_Number3] is not null Then [Phone_Number3]+' ' Else '' End)),' ',', ') as Phone_numbers
From MYTable
希望这是你正在寻找的东西,我不知道这是否会帮助你到目前为止的问题。
可能的重复[有没有办法创建一个SQL Server函数来“连接”从子查询到单个分隔字段的多行?](http://stackoverflow.com/questions/6899/is-there- a-way-to-create-a-sql-server-function-to-join-multiple-rows-from-a-sub) – 2011-05-13 18:31:15
这个问题的基本思想已被多次提出。看看下面答案中提供的链接。 – TKTS 2011-05-13 18:36:37
@TKTS - 如果这是SO上最猖獗的重复,我不会感到惊讶。似乎每天至少要问一次,有时候更多。 – 2011-05-13 18:38:04