SQL同列字符串拼接

VBA函数:

Public Function Combstr(tablename As String, fieldname As String, groupfield As String, groupvalue As String) As String
Dim resultstr As String
Dim rs As Recordset
Dim sql As String
sql = "select " & fieldname & " from " & tablename & " where " & groupfield & " = " & groupvalue
Set rs = CurrentDb.OpenRecordset(sql)
If rs.RecordCount > 0 Then
Do While Not rs.EOF
resultstr = resultstr & rs.Fields(0).Value
rs.MoveNext
Loop
End If
If resultstr <> "" Then resultstr = Mid(resultstr, 1)
Combstr = resultstr
End Function


SQL查询如下:按照orig_fid字段分组,然后将同组内ZB_text字段值进行拼接

SELECT orig_fid, combstr("zb_temp","ZB_text","orig_fid",orig_fid) AS zb
FROM zb_temp
GROUP BY orig_fid;


### SQL Server 字符串拼接方法 #### 使用 `STRING_AGG()` 函数 `STRING_AGG()` 是一种聚合函数,能够将多行字符串合并成单个字符串,并允许指定分隔符。此功能自 SQL Server 2017 版本起可用。 ```sql SELECT STRING_AAG(column_name, ', ') AS concatenated_string FROM table_name; ``` 上述查询会把表内某一的数据项通过逗号加空格的形式连接起来形成新的字段[^1]。 #### 动态SQL中的字符串拼接 当涉及到动态SQL时,在构建最终执行的命令之前可能需要先组合一些部分。下面是一个简单的例子展示了怎样创建并运行一条基于输入参数而变化的选择语句: ```sql CREATE PROCEDURE Test @TestID INT AS BEGIN DECLARE @s NVARCHAR(MAX); SET @s = 'SELECT * FROM dbo.Categories WHERE CategoryID=''' + CAST(@TestID AS VARCHAR) + ''''; PRINT @s; -- 显示生成后的SQL语句 EXEC (@s); -- 执行该SQL语句 END; ``` 这段脚本定义了一个名为 `Test` 的存储过程,它接受一个整数类型的参数来过滤特定类别的记录[^3]。 #### 利用 `STUFF()` 和 `FOR XML PATH('')` 对于较早版本的SQL Server 或者其他场景下不支持 `STRING_AGG()` ,则可以采用 `STUFF()` 结合 `FOR XML PATH('')` 来实现类似的效果。这里给出一段示范代码用来获取所有名称之间由连字符相连的结果集: ```sql SELECT STUFF(( SELECT '-' + NAME FROM TABLENAME FOR XML PATH('') ), 1, 1, '') AS SPLITNAME; ``` 这里的技巧在于利用了XML路径表达式的特性以及 `STUFF()` 方法去除多余的前缀符号[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值