SQL行列转换——商品SKU颜色尺码合并

create procedure proc_GoodsSkuCombine
as
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[GoodsTemp1]‘) AND type in (N‘U‘))
DROP TABLE [dbo].GoodsTemp1

;with roy as
(select Number,ColorName,SizeName,row=row_number()over(partition by Number,ColorName order by Number,ColorName ) from V_JSKC_BySKU)
,Roy2 as
(select Number,ColorName,
cast(SizeName as nvarchar(100))SizeName,row from Roy where row=1
union all
select a.Number,a.ColorName,
cast(b.SizeName+‘,‘+a.SizeName as nvarchar(100)),a.row from Roy a join Roy2 b
on a.Number=b.Number and a.ColorName=b.ColorName and a.row=b.row+1)
select Number,ColorName,SizeName
into GoodsTemp1
from Roy2 a
where row=(select max(row) from roy where Number=a.Number and ColorName=a.ColorName) order by Number,ColorName option (MAXRECURSION 0)

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[GoodsTemp2]‘) AND type in (N‘U‘))
DROP TABLE [dbo].GoodsTemp2

;with roy as
(select Number,ColorName,SizeName,row=row_number()over(partition by Number order by Number ) from GoodsTemp1)
,Roy2 as
(select Number,SizeName,
cast(ColorName as nvarchar(100))ColorName,row from Roy where row=1
union all
select a.Number,a.SizeName,
cast(b.ColorName+‘,‘+a.ColorName as nvarchar(100)),a.row from Roy a join Roy2 b
on a.Number=b.Number and a.row=b.row+1)
select Number,ColorName,SizeName
into GoodsTemp2
from Roy2 a
where row=(select max(row) from roy where Number=a.Number ) order by Number option (MAXRECURSION 0)

时间: 2024-10-26 16:40:55

SQL行列转换——商品SKU颜色尺码合并的相关文章

SQL行列转换6种方法

在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解法以及Oracle支持解法. 一.测试数据 测试表依旧采用Oracle经典的scott模式下的dept表和emp表,结构如下: DEPT: create table DEPT ( DEPTNO NUMBER(2) not null, DNAME VARCHAR2(14), LOC VARCHAR2(

【转】SQL行列转换

原文地址:http://blog.csdn.net/kiki113/article/details/4105929 行列转换等经典SQL语句 1.--行列转换 原表:   姓名     科目   成绩           张三     语文    80           张三     数学    90           张三     物理    85           李四     语文    85           李四     物理    82           李四     英语

sql行列转换

首先我们建立一张表,名为RToC,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示. 2 我们往表中加入数据,分别添加小明与小花的语文和数学成绩,如图所示. 3 接下来,我们要进行行列转换,列应该是name,语文,数学.我们首先要考虑是如何得到列名,我们可以通过分组得到课程名称.如图所示,我们通过分组语句,从查询结果我们可以看出课程名的拼接字符串. 代码: declare @sql varchar(200) select @sql=ISNULL(@s

oracle高级SQL(四)--SQL行列转换专题2

[上一专题]  行列转换1  -- PIVOT与UNPIVOT函数的介绍 实现案例 1001 lufei 1001 shanzhi 1001 namei 1001 qiaoba 实现效果如下: 1001 lufei,shanzhi,namei,qiaoba 典型的行列转换:实现这种方法有很多. 其中oracle11g之后提供了listagg函数;用来实现上面的效果最好不过了:我们来看下listagg语法 listagg函数的语法结构如下: >listagg( [,]) within group

SQL 行列转换简单示例

SQLSERVER 2005 以后提供了新的方式进行行列转换,下面是一个实例供参考: if object_id('tb') is not null drop table tbTest go create table tbTest(产品 varchar(10),季度 varchar(10),销售额 int) insert into tbTest values('产品1','一季度',1000) insert into tbTest values('产品1','二季度',2000) insert i

SQL行列转换的另一种方法

create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)insert into tb values('张三' , '语文' , 74)insert into tb values('张三' , '数学' , 83)insert into tb values('张三' , '物理' , 93)insert into tb values('李四' , '语文' , 74)insert into tb values('李四' , '数学' , 8

SQL中PIVOT 行列转换

SQL中PIVOT 行列转换 本文导读:T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转行,同时执行聚合运算,UNPIVOT则与其相反,实现数据的行转列. PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合.UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转换为列值. 通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 一.PIVOT实例 1

sql server 行列转换

SQL 列转行 2011-04-22 16:13:41 好东西,转一下,嘿嘿. * 普通行列转换 (爱新觉罗.毓华 2007-11-18于海南三亚) 假设有张学生成绩表(tb)如下: Name Subject Result 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 */ ------------------------------------------------------------------------- /* 想变成

简单的叙述下SQL中行列转换的小知识!

行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的比我的可能会更好,就当我记录一下自己的学习经历吧.这里我们列举一个关于股票的每日入账出账做一个统计然后整理数据,虽然例子可能不太合理, 但是不要太执着于这些细节,能说明问题就好,傻笑ing..... 1 列转行:按照某一列分组,将另一列作为行时列名可数,不变. 什么意思呢?话说多了反而不懂,放两张图