关于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方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
随机推荐
- BZOJ 4403: 序列统计 数学 lucas
4403: 序列统计 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4403 Description 给定三个正整数N.L和R,统计长度在 ...
- [Visual Studio] 安装清单
VS安装位置要求路径必须是英文,且位于Program Files (x86)文件夹下. 下载工具vs_Professional.exe:https://pan.baidu.com/s/1jHRjiia ...
- ASP.NET 构建高性能网站 架构设计
Web前端系统 为了达到不同应用的服务器共享.避免单点故障.集中管理.统一配置等目的,不以应用划分服 务器,而是将所有服务器做统一使用,每台服务器都可以对多个应用提供服务,当某些应用访问量升高时,通过 ...
- CentOS 7挂载磁盘提示: mount: unknown filesystem type 'LVM2_member'
说明:CentOS 7采用新的分区格式xfs以及LVM的模式,造成挂载硬盘的方式有变化. 解决: 使用lvdisplay命令查看LVM最终的卷路径,然后再进行挂载. 比如: mount /dev/Vo ...
- MCP2515 : SPI CAN controller management
#ifndef __MCP2515_H #define __MCP2515_H /* mcp2515.h This file contains constants that are specific ...
- 用最简单的例子理解对象为Null模式(Null Object Pattern)
所谓的"对象为Null模式",就是要求开发者考虑对象为Null的情况,并设计出在这种情况下的应对方法. 拿"用最简单的例子理解策略模式(Strategy Pattern) ...
- 高手写的“iOS 的多核编程和内存管理”
原文地址:http://anxonli.iteye.com/blog/1097777 多核运算 在iOS中concurrency编程的框架就是GCD(Grand Central Dispatch), ...
- 转 iOS开发debug跟release版本log屏蔽方法
简单介绍以下几个宏: ) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参数 ...
- python测试开发django-8.windows系统安装mysql8教程
前言 MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习. windows7/windows10 mysql-8.0.11-winx64 下载安装包 mysql的 ...
- JSONString 与 JSONData 与字典或者数组互相转化
JSON JSON相关的,数据彼此间的转化进行了简单地封装,源码如下,支持arc与非arc YXJSON.h + YXJSON.m // // YXJSON.h // // JSONString 与 ...