如果希望获得 'A'+'B',只有通过使用游标吗?
有其他办法吗?
6 个解决方案
#1
declare @s varchar(1000)
select @s=isnull(@s+'+','')+f1 from t where ...
select @s
#2
没有任何理由使用游标,如果你只需要获得一个数据,可以用1楼的方法
如果是数据集,就是合并字符串的内容
以下是利用XML合并字符串的例子
SELECT CustomerID,
(SELECT CAST(OrderID AS VARCHAR(10)) + ';' AS [text()]
FROM dbo.Orders AS O
WHERE O.CustomerID = C.CustomerID
ORDER BY OrderID
FOR XML PATH('')) AS Orders
FROM dbo.Customers AS C;
GO
#3
MSSQL2005及以上版本可以使用STUFF函数。
#4
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([name] VARCHAR(1))
INSERT [tb]
SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
SELECT 'd'
--------------开始查询--------------------------
DECLARE @s VARCHAR(1000)
SELECT @s=ISNULL(@s+',' , '')+[name] FROM [tb]
SELECT @s
----------------结果----------------------------
/*
(无列名)
a,b,c,d
*/
#5
太多人不会基于集合的操作了。老觉得用游标、while来实现循环功能。
#6
感谢大家的方法,也感谢批评!
#1
declare @s varchar(1000)
select @s=isnull(@s+'+','')+f1 from t where ...
select @s
#2
没有任何理由使用游标,如果你只需要获得一个数据,可以用1楼的方法
如果是数据集,就是合并字符串的内容
以下是利用XML合并字符串的例子
SELECT CustomerID,
(SELECT CAST(OrderID AS VARCHAR(10)) + ';' AS [text()]
FROM dbo.Orders AS O
WHERE O.CustomerID = C.CustomerID
ORDER BY OrderID
FOR XML PATH('')) AS Orders
FROM dbo.Customers AS C;
GO
#3
MSSQL2005及以上版本可以使用STUFF函数。
#4
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([name] VARCHAR(1))
INSERT [tb]
SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT 'c' UNION ALL
SELECT 'd'
--------------开始查询--------------------------
DECLARE @s VARCHAR(1000)
SELECT @s=ISNULL(@s+',' , '')+[name] FROM [tb]
SELECT @s
----------------结果----------------------------
/*
(无列名)
a,b,c,d
*/
#5
太多人不会基于集合的操作了。老觉得用游标、while来实现循环功能。
#6
感谢大家的方法,也感谢批评!