关于SQL 行转列的办法
公司实施小姑娘要我写一个SQL给她
需求如下:
现在有表A,字段 id code parentid backres,现数据如下
id code parentid backres 1 A 5 2 B 5 3 C 5 4 D 5 5 E 6 6 F
我想得到的是
id code parentid backres 1 A 5 B;C;D; 2 B 5 A;C;D; 3 C 5 A;B;D; 4 D 5 A;B;C; 5 E 6 6 F
意思是,根据Parentid得到ABCD都属于E,然后将ABCD的Backres改为,A;B;C;D;,减去它们本身 我做了一个很笨的办法 用游标遍历 再用参数存值 sql如下
create table #temp
(
Code nvarchar(50),
BackCode nvarchar(4000)
)
declare cursor1 cursor
for select Id,Code,parentid from Master_ResourceUnit where parentid is not null
open cursor1
DECLARE @Id nvarchar(100)
DECLARE @Code nvarchar(100)
DECLARE @Parentid nvarchar(100)
while @@FETCH_STATUS=0
begin
print @id
DECLARE @combinedString nvarchar(4000)
set @combinedString=''
select @combinedString=@combinedString+Code+';' from Master_ResourceUnit where ParentId =@Parentid and Code<>@code
insert #temp (Code,BackCode) values(@Code,@combinedString)
print @combinedString
fetch next from cursor1 into @id,@code,@Parentid
end
close cursor1
deallocate cursor1
效果是有的不过还是太笨了
结果她百度提问了 得到的解决办法如下:
--建表Create Table T( id int, code Varchar(10), parentid int, backres Varchar(10) ) --插入数据 insert into T values(1, 'A', 5,'') insert into T values(2, 'B', 5,'') insert into T values(3, 'C', 5,'') insert into T values(4, 'D', 5,'') insert into T values(5, 'E', 6,'') insert into T values(6, 'F', 0,'') --更新(按parentid把code按分号拼接,然后替换掉本身) Update T Set backres= Replace((Select code+';' From T A Where T.parentid=A.parentid For Xml Path('') ),code+';','') --查看结果 Select * from T关于SQL 行转列的办法的更多相关文章
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- Ms sql行转列。汇总
SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...
- sql 行专列 列转行 普通行列转换
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...
- sql 行转列 PIVOT 列转行 UNPIVOT
原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...
- sql 行转列总结
原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- SQL行转列 (及EAV模型获取数据)
参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...
- SQL行转列,列转行
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...
- sql 行转 列, 列转行
行列互转 复制代码 create table test(id ),quarter int,profile int) insert into test values(,,) insert into te ...
- SQL行转列和列转行
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
随机推荐
- python3登录网页(163邮箱)实例
# -*- coding: utf-8 -*- import urllibimport http.cookiejar as cookielibimport urllib.request as urll ...
- codevs 1052 地鼠游戏 优先队列
1052 地鼠游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1052/ Descriptio ...
- 使用HAproxy如何实现web站点的动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别 适用于那些负载特大的web站点,这些站点通常 ...
- MySQL的转义符 ` 作用
` 是 MySQL 的转义符,避免和 mysql 的本身的关键字冲突,只要你不在列名.表名中使用 mysql 的保留字或中文,就不需要转义. 所有的数据库都有类似的设置,不过mysql用的是`而已.通 ...
- Tasker to detect application running in background
We used to be told that tasker is only capable of detecting foreground application, if the app gets ...
- struts2对拦截器使用带实例
拦截器是struts2的核心.拦截器可以拦截请求,控制视图的走向.那么怎么来实现自定义的拦截器呢? 这里我们做一个例子. 首先假现在做了两个jsp页面一个是登陆的信息的(用session来模拟),一个 ...
- POJ 1151 Atlantis 求矩阵面积并 扫描线 具体解释
题意: 给定n个矩阵的左下角和右上角坐标,求矩阵面积并(矩阵总是正放的,即与x轴y轴都平行) 思路: 扫描线裸题 http://www.cnblogs.com/fenshen371/p/3214092 ...
- jQuery碎语(1) 基础、选择要操作的元素、处理DOM元素
1.基础 jquery对象集: $():jquery对象集合 获取jquery对象集中的元素: 使用索引获取包装器中的javascript元素:var temp = $('img[alt]')[0] ...
- MVC动态添加文本框,后台使用FormCollection接收
在"MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体"中,对于前台传来的多个TextBox值,在控制器方法中通过强类型来接收.使用FormCollection也可以接 ...
- Spring-Bean配置-使用外部属性文件(转)
Spring-Bean配置-使用外部属性文件 所以可以通过@value注解获取配置文件的key-value,生成一个配置文件bean.用以在代码中直接使用bean的方式. •在配置文件里配置Bean时 ...