拆分Sql列中内容的拆分. /*按照符号分割字符串*/ create function [dbo].[m_split](@c varchar(2000),@split varchar(2)) returns @t table(col varchar(200)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c =
继上篇<SQL 列转行 合并多条记录>后,有网友反馈新的需求还是不太会用. 现举例说明 一,网友需要如下的效果: 其实,这个需求依然可以我上篇的方法进行解答,但为了实现分组,需要distinct group1,同时,为了根据key1,key2,key3是否相同进行分组,所以要用where进行连接. 语法格式:select .....from t1 where key1=a.key1 and key2=a.key2... for xml path('') 二,进入正题,代码如下: select
在工作中,大家可能会遇到一些SQL列转行.行转列的问题,恰好,我也遇到了,就在此记录一下.此处所用的是SQLServer2008R2. 行转列,列转行,都要预先知道要要处理多少数据,在此我就以三种方案来说明一下,分别是case when.PIVOT.For XML. 列转行: 首先创建测试数据: --测试语句,准备创建表的语句:如下 CREATE TABLE dbo.test1 ( id int IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, t
select stuff((select ','+w.Waybillno from Web_Way_Waybill w where w.IsValid<>'Y' AND w.TruckOrder='T1712220007' FOR XML PATH('')),1,1,''))+ left(',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', (59- (select len(( select stuff((select '
CREATE function [dbo].[getGroupPath](@groupId int) returns nvarchar(2000) as begin declare @path nvarchar(2000)='/'; with cr as ( select * from FAQGroup where Id=@groupId union all select b.* from cr a join FAQGroup b on a.ParentId=b.id ) select @pat
--列转行,逗号拼接指定列的值Oracle中写法:select wmsys.wm_concat(Field1) from TableASQL Server中写法:SELECT STUFF(( SELECT ',' + Field1 from TableA FOR XML PATH('')), 1, 1, '')
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: table_sou
一.修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称 -------说明:添加一个表的字段的约束并指定默认值 二.修改字段名: alter table 表名 rename column A to B 三.修改字段类型: alter table 表名 alter column UnitPrice deci
test表: 执行列转行sql: select student, sum(case Course when '语文' then Score else null end) 语文, sum(case Course when '数学' then Score else null end) 数学, sum(case Course when '英语' then Score else null end) 英语 from test group by student 得到结果:
一个产品收藏表 Collection , 把该产品被收藏的人拼接在一列中如下: SQL SERVER SELECT ProjectID, UserIDs = ','+(STUFF((SELECT ',' + CONVERT(VARCHAR,UserID)FROM Collection WHERE ProjectID = a.ProjectID FOR XML PATH('')),1,1,'')) FROM Collection a GROUP BY ProjectID ;
转自:http://www.maomao365.com/?p=10739 摘要: 下文讲述在sqlserver 对逗号分隔的字符串转换为数据表的另类方法实现,如下所示: 实验环境:sql server 2008 R2 实现思路: 将组合字符串中的逗号替换为“ 'as n union all select ' ”,然后将替换后的字符串加上select 和 前后加上单引号 是其成为可执行sql脚本, 最后运行替换后的字符串,就可以得到一张数据表,如下所示: ) set @maomao365 ='s