表结构和数据如下(表名Test): NO VALUE NAME 1 a 测试1 1 b 测试2 1 c 测试3 1 d 测试4 2 e 测试5 4 f 测试6 4 g 测试7 Sql语句: select No, ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value, ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name from (select No, Value, Name,
[pivot]行转列:多行变一列 假设学生成绩表Score1 Name Subject Score 小张 语文 88 小花 数学 89 小张 数学 90 Name 语文 数学 小花 null 89 小张 88 90 --一定要有聚合函数, 如sum(Score) select * from Score1 pivot (sum(Score) for Subject in (语文,数学)) b [unpivot]列转行:一列变多行 假设学生成绩表Score2 Name Chinese Math 小花
--字符串分割表函数 ) ) declare @i int; declare @count int; ); ); declare @Index int; )) declare @rowID int; set @str='aaa;bbb;ccc;d;'; set @split=';'; ; set @count=LEN(@str); set @ChildStr=@str; ; while @i<=@count begin set @Index= charindex(@split,@ChildStr
可编程性—表值函数 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[Split] ( @RowData nvarchar(MAX), @SplitOn nvarchar(5) ) RETURNS @ReturnValue TABLE (Data NVARCHAR(MAX)) AS BEGIN Declare @Counter int Set @Counter = 1 While (Charindex(
由于工作需要需要处理一些以逗号分隔的字符串,每次都要现做很是麻烦,网上找了很多都没有现成的,好吧,自己动手写一个好了 )) ) BEGIN /*函数功能: 把带逗号的字符串分割取出 参数: num 要取出的字符串的索引值, 以0开始 str 以逗号分割的字符串 扩展: 将逗号替换成其他符合,即可完成不同分隔符拆分字符串,亦可以把分隔符作为参数 */ SUBSTRING( SUBSTRING_INDEX(), CASE num THEN CHAR_LENGTH( SUBSTRING_INDEX(s
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). 1 --创建测试环境 2 USE tempdb; 3 GO 4 5 IF OBJECT_ID('dbo.Orders') IS NOT NU
行列互转 复制代码 create table test(id ),quarter int,profile int) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(