在数据库中将同一个字段的多个值用逗号分开,并且合并成一列的方法
2008-11-25 11:28
609 查看
在数据库中将同一个字段的多个值用逗号分开,并且合并成一列的方法如下:
在数据库中创建一个自定义函数:
CREATE FUNCTION f_catString(@id uniqueidentifier)
RETURNS NVARCHAR(1000)
AS
BEGIN
DECLARE @s NVARCHAR(1000)
SET @s=''
SELECT @s=@s+','+Name
FROM StaffArchive
INNER JOIN NoticeChecker
ON StaffArchive.StaffID=NoticeChecker.CheckerID
WHERE NoticeChecker.CheckNoticeID=@id
return(stuff(@s,1,1,''))
END
GO
然后在查询语句中进行该方法的调用:
SELECT *
FROM
(
SELECT CheckNotice.CheckNoticeID AS CNI1,dbo.f_catString(CheckNoticeID) AS CheckerName
FROM CheckNotice) AS CN1
INNER JOIN
(SELECT CheckNotice.CheckNoticeID AS CNI2,CheckNoticeNumber,CreatNoticeTime
,CheckNotice.WorkNo,StaffArchive.[Name],Station.strStationName,ShiftConfig.ShiftName
,CASE CheckNoticeTypeID WHEN 0 THEN '一般违纪' WHEN 2 THEN '严重违纪' ELSE '表扬' END AS CheckName
,AntiDisciplineTypeConfig.AntiDisciplineTypeName
,WorkGroupConfig.WorkGroupName,LaneConfig.LaneName
FROM CheckNotice
INNER JOIN StaffArchive ON CheckNotice.StaffID=StaffArchive.StaffID
INNER JOIN AntiDisciplineTypeConfig ON AntiDisciplineTypeConfig.AntiDisciplineTypeID=CheckNotice.AntiDisciplineTypeID
INNER JOIN Station ON CheckNotice.StationID=Station.StationId
INNER JOIN ShiftConfig ON CheckNotice.ShiftID=ShiftConfig.ShiftID
INNER JOIN LaneConfig ON CheckNotice.LaneRecordID=LaneConfig.LaneRecordID
INNER JOIN WorkGroupConfig ON CheckNotice.WorkGroupRecordID=WorkGroupConfig.[ID]
WHERE CheckNotice.CreatedRecordTime BETWEEN '2008-10-1 00:00:00' AND '2008-10-31 00:00:00'
AND HandleStatus=2
) AS CN2
ON CN1.CNI1=CN2.CNI2
ORDER BY CreatNoticeTime DESC
;
在数据库中创建一个自定义函数:
CREATE FUNCTION f_catString(@id uniqueidentifier)
RETURNS NVARCHAR(1000)
AS
BEGIN
DECLARE @s NVARCHAR(1000)
SET @s=''
SELECT @s=@s+','+Name
FROM StaffArchive
INNER JOIN NoticeChecker
ON StaffArchive.StaffID=NoticeChecker.CheckerID
WHERE NoticeChecker.CheckNoticeID=@id
return(stuff(@s,1,1,''))
END
GO
然后在查询语句中进行该方法的调用:
SELECT *
FROM
(
SELECT CheckNotice.CheckNoticeID AS CNI1,dbo.f_catString(CheckNoticeID) AS CheckerName
FROM CheckNotice) AS CN1
INNER JOIN
(SELECT CheckNotice.CheckNoticeID AS CNI2,CheckNoticeNumber,CreatNoticeTime
,CheckNotice.WorkNo,StaffArchive.[Name],Station.strStationName,ShiftConfig.ShiftName
,CASE CheckNoticeTypeID WHEN 0 THEN '一般违纪' WHEN 2 THEN '严重违纪' ELSE '表扬' END AS CheckName
,AntiDisciplineTypeConfig.AntiDisciplineTypeName
,WorkGroupConfig.WorkGroupName,LaneConfig.LaneName
FROM CheckNotice
INNER JOIN StaffArchive ON CheckNotice.StaffID=StaffArchive.StaffID
INNER JOIN AntiDisciplineTypeConfig ON AntiDisciplineTypeConfig.AntiDisciplineTypeID=CheckNotice.AntiDisciplineTypeID
INNER JOIN Station ON CheckNotice.StationID=Station.StationId
INNER JOIN ShiftConfig ON CheckNotice.ShiftID=ShiftConfig.ShiftID
INNER JOIN LaneConfig ON CheckNotice.LaneRecordID=LaneConfig.LaneRecordID
INNER JOIN WorkGroupConfig ON CheckNotice.WorkGroupRecordID=WorkGroupConfig.[ID]
WHERE CheckNotice.CreatedRecordTime BETWEEN '2008-10-1 00:00:00' AND '2008-10-31 00:00:00'
AND HandleStatus=2
) AS CN2
ON CN1.CNI1=CN2.CNI2
ORDER BY CreatNoticeTime DESC
;
相关文章推荐
- 一个 活动支持多个渠道的时候,列转行,同一个值合并成一个字段,逗号分开
- 创建一个自增的数据库表的方法,并且设置为主键的方法
- PHP将二维数组某一个字段相同的数组合并起来的方法
- Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
- 两列字段,合并成一个字符串,并且中间加一个符号,并去掉所有的空格
- oracle数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
- 当写一个insert语句时,某一字段需要从需要插入的数据库中获取其最大值并且加1
- Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
- 更新数据库所有表的某一个指定字段 ,附加对‘将 varchar 值转换为数据类型为 int 的列时发生语法错误’处理方法
- 在WPS或Excel中多列合并成一列合并后中间加空格或-或逗号的写法,可参照以下方法,wps与excel操作与用法都相同
- 把一个逗号分开的字符串转化为数组的两个方法
- EXCEL中将多个单元格内容合并到一个单元格中的方法(转帖+亲自实践)
- 160519、Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
- Mysql Workbench中将数据库中表的一个字段设置为非空的两种方式
- 同一个数据库里,两个相同字段但是顺序不同的数据表合并教程
- hadoop超时解决办法context.progress()的作用 假设在map()方法中,你有一个从数据库读取大量数据的操作,是用一个循环来完成的,并且,在读完全部的数据之前,你不会有任何的数据输出
- Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
- SQL Server 将Id相同的字段合并,并且以逗号隔开
- PHP将二维数组某一个字段相同的数组合并起来的方法