SQL 纵向表转为横向表
来源:互联网 发布:苹果windows系统触摸板 编辑:程序博客网 时间:2024/05/22 14:05
需求:
纵向表
A列 B列 C列
张三 1 2011-10-1 8:30
张三 2 2011-10-1 17:30
李四 1 2011-10-1 8:30
李四 2 2011-10-1 17:30
王五 1 2011-10-1 8:30
张三 1 2011-10-3 8:30
张三 2 2011-10-3 17:30
张三 1 2011-10-4 8:30
B列的1,2代表不同的状态,转换下,使上面的表变成
A列 B列 C列
张三 2011-10-1 8:30 2011-10-1 17:30
李四 2011-10-1 8:30 2011-10-1 17:30
王五 2011-10-1 8:30 null
张三 2011-10-3 8:30 2011-10-3 17:30
没有的则显示空,同一个人,同一天的合并一起
解决方案:
declare @T table (A varchar(4),B int,C datetime)
insert into @T
select '张三',1,'2011-10-1 8:30' union all
select '张三',2,'2011-10-1 17:30' union all
select '李四',1,'2011-10-1 8:30' union all
select '李四',2,'2011-10-1 17:30' union all
select '王五',1,'2011-10-1 8:30' union all
select '张三',1,'2011-10-3 8:30' union all
select '张三',2,'2011-10-3 17:30' union all
select '张三',1,'2011-10-4 8:30'
DECLARE @CUR_aaa CURSOR
DECLARE @DayID NVARCHAR(10)
DECLARE @bb TABLE (DayID NVARCHAR(10),A NVARCHAR(50),B NVARCHAR(50),C NVARCHAR(50))
SET @CUR_aaa = CURSOR FOR
SELECT DISTINCT CONVERT(NVARCHAR(10),CONVERT(DATETIME,C),120) as DayID FROM @T
OPEN @CUR_aaa
FETCH next FROM @CUR_aaa into @DayID
WHILE (@@FETCH_STATUS=0)
BEGIN
INSERT INTO @bb(DayID,A) SELECT DISTINCT @DayID,A FROM @T
FETCH next FROM @CUR_aaa into @DayID
END
Close @CUR_aaa
DEALLOCATE @CUR_aaa
UPDATE @bb SET B=CONVERT(NVARCHAR(20),CONVERT(DATETIME,a.C),120) FROM @T a,@bb b where a.A=b.A and CONVERT(NVARCHAR(10),CONVERT(DATETIME,a.C),120)=b.DayID and a.B='1'
UPDATE @bb SET C=CONVERT(NVARCHAR(20),CONVERT(DATETIME,a.C),120) FROM @T a,@bb b where a.A=b.A and CONVERT(NVARCHAR(10),CONVERT(DATETIME,a.C),120)=b.DayID and a.B='2'
DELETE FROM @bb WHERE b IS NULL AND C IS NULL
SELECT A,B,C FROM @bb order by CONVERT(NVARCHAR(10),CONVERT(DATETIME,B),120),A
-----------------------------------------------------
运行结果如下:
横向表:
A B C
张三 2011-10-01 08:30:00 2011-10-01 17:30:00
王五 2011-10-01 08:30:00 NULL
李四 2011-10-01 08:30:00 2011-10-01 17:30:00
张三 2011-10-03 08:30:00 2011-10-03 17:30:00
张三 2011-10-04 08:30:00 NULL
- SQL 纵向表转为横向表
- SQL 将横向数据转为纵向记录
- sql server 纵向表横向输出的实现
- mysql 分表-横向,纵向
- Sql 横向转纵向
- Oracle的表结构:纵向和横向
- Oracle的表结构:纵向和横向
- Oracle的表结构:纵向和横向
- 横向和纵向的数据库分表
- sql语句纵向转横向
- SQL如何将表中的数据从纵向显示转换成横向显示
- SQL Server数据库纵向转横向
- SQL,纵向数据变为横向显示。
- ORACLE纵向表转换为横向表写法
- 在Oracle中采用纵向和横向结构表
- 在Oracle中采用纵向和横向结构表 .
- MySQL交叉表:纵向数据显示为横向
- SQL纵向变成横向,横向变成纵向(经典案例添加自己的想法)
- Teamcenter开发问题之-- relation 无法创建 and 无法check in
- GitHub 管理你的project
- C++学习笔记(二)
- libmemcached1.0.2 C/C++ API使用实例、测试及修改
- C#处理MySQL数据库和SQL Server数据库的区别(存储过程的编写与调用、中文乱码、二进制图片存储与调用)
- SQL 纵向表转为横向表
- c++中new和delete的使用方法
- feof()和EOF的用法—— C中文件结尾的判断
- 比较好的java学习资料 下载
- VC 2005 下如何编译安装并开发 QT 4.4.0 应用程序
- Simple Long Polling Example with JavaScript and jQuery
- 关于asp.net中不能输出网页对话框
- centos 6.2 控制台安装 zhcon 2.5
- HibernateShards-数据库水平分区解决方案