在我们开发的过程中,难免遇到一种场景,把某个表中的的某个列的值拼接成用逗号隔开的一行数据
如图:我们把UserId列拼接成一行数据
为此我写了一个存储过程来解决此类问题。
-- Author: LHM
-- Create date: 2015-01-15-- Description: 把表中某一个列按照逗号拼接成一行
--示例: EXEC [Sp_TableToString] ‘cast([UserId] as varchar)‘,‘[X_RoleUser]‘,‘RoleId=1‘-- =============================================
CREATE PROCEDURE [dbo].[Sp_TableToString]
@ColumnName varchar(100),
@TableName nvarchar(100),
@Filter varchar(1000)=‘‘
AS
BEGIN
DECLARE @sql varchar(500)
IF(@Filter<>‘‘)
BEGIN
SET @Sql= ‘ SELECT Result= STUFF( ( SELECT ‘‘,‘‘ + ‘[email protected]+‘ FROM ‘[email protected]+ ‘ WHERE ‘ [email protected]+ ‘ FOR XML PATH(‘‘‘‘) ), 1, 1, ‘‘‘‘) ‘
END
ELSE
BEGIN
SET @Sql= ‘ SELECT Result= STUFF( ( SELECT ‘‘,‘‘ + ‘[email protected]+‘ FROM ‘[email protected]+ ‘ FOR XML PATH(‘‘‘‘) ), 1, 1, ‘‘‘‘) ‘
END
EXEC (@Sql)
END如果有兴趣的朋友可以建立测试表,一下提供建表语句
CREATE TABLE [dbo].[X_RoleUser](
[Id] [int] IDENTITY(1,1) NOT NULL,
[RoleId] [int] NOT NULL,
[UserId] [int] NOT NULL,
[Company_Id] [int] NULL,
CONSTRAINT [PK_X_RoleUser] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO
添加一些测试数据之后,然后执行存储过程 EXEC [Sp_TableToString] ‘cast([UserId] as varchar)‘,‘[X_RoleUser]‘,‘RoleId=1‘ 就可以看到测试效果了。
在这有一个问题就是如果表中的要转换的字段不是字符串型的话,此时应该利用Cast函数把它转换成字符串型
希望给遇到此类需求的朋友带来帮助,谨此记录。
如果朋友们觉得以后可能会用到的话,欢迎转载,当然也可以推荐一下,谢谢。
PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好。
[原创]SQL 把表中某一个列按照逗号拼接成一行
时间: 2024-08-06 11:51:19
[原创]SQL 把表中某一个列按照逗号拼接成一行的相关文章
[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式
我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ------> 从左边图转换成右边图,像这种需求,我们难免会遇到. 今天我写了个存储过程来解决这种问题.主要方式是利用master..spt_values表. 具体存储过程如下: -- Author: LHM -- Create date: 2015-01-10 -- Description: 把表中某一个列按照逗号拼接列表 --示例: EXEC [Sp_Str
mysql 把表中某一列的内容合并为一行
1,把表中某一列的内容合并为一行 select province,CONCAT('[\"全部\",\"',GROUP_CONCAT(city ORDER BY cityID separator '\"\,\"'),'\"]') as group1 from hat_city a LEFT JOIN hat_province b on a.father=b. provinceID GROUP BY father ORDER BY cityID:根据
SqlSever基础 insert 给一个数据库中的表中的一个列一次性添加多行数据
1 code 1 --select * from sysdatabases 2 3 --指定数据库 4 use helloworld 5 --查看该数据库中的Teacher表格列有哪几个 6 select * from Teacher 7 -- 向 teacher表格中的ShengHao一次加入两行数据 8 insert into Teacher(ShengHao) 9 values('女娲娘娘'), 10 ('无盐娘娘') 11 2 show
SqlSever基础 update 将一个数据库中的表中的一个列下的指定行的元素改变为一个值
1 code 1 -- 表名 列名 新值 将一行的ShengHao列为 女娲娘娘的Id列改为0 2 update Teacher1 set Id='0' where ShengHao='女娲娘娘' 2 show
SqlSever基础 delete 将一个数据库中的表中的一个列下的符合条件的元素删除
1 2 code 1 --显然金灵子 额...与这里面的人物有着大区别,需要删除掉 2 -- 表格名字teacher2 Id一列的数值为100000 3 delete Teacher2 where Id='100000' 3 show
SqlSever基础 update 将一个数据库中的表中的一个列下的所有元素改变为同一个值
1 2 code 1 -- 表名 列名 新值 2 update Teacher1 set Id='1' 3 show
SQL 同一个表中 根据一列更新另一列(不同行)
已知红,根据红update出绿. update tab_wbap_wbs t set t.prepose_wbs_id = (select wbs_id from tab_wbap_wbs m where t.prepose_wbs_no = m.wbs_no and m.project_id = 281) where t.project_id = 281 and t.prepose_wbs_no <> '0' and (t.prepose_wbs_id = '0' or t.prepose_
oracle数据库将一列的值拼接成一行,并且各个值之间用逗号隔开
使用场景:把某一列值转换为逗号分隔的字符串 例子:比如查询所有的的表空间如下,现在要获得所有的表空间用逗号分隔的字符串(比如rman duplicate的时候skip表空间) SQL> select name from v$tablespace; NAME ------------------------------ SYSTEM SYSAUX CTXD APPS_TS_TX_DATA APPS_TS_TX_IDX OWAPUB APPS_TS_QUEUES ODM OLAP APPS_TS_T
SQL 把表中字段存储的逗号隔开内容转换成列表形式
原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ------> 从左边图转换成右边图,像这种需求,我们难免会遇到. 今天我写了个存储过程来解决这种问题.主要方式是利用master..spt_values表. 具体存储过程如下: -- Author: LHM -- Create date: 2015-01-10 -- Description: 把