sql结果记录横向转换问题
2007-09-25 13:51
267 查看
目前结果记录如下
产品名称 产品类型 产品数量 时间类别
财富广场办公26a
财富广场办公5b
财富广场办公2c
财富广场公寓4a
财富广场公寓5b
财富广场公寓1c
财富广场商铺2c
想转换成如下结果记录
产品名称 产品类型 (产品数量)时间类别a 时间类别b 时间类别c 时间类别d
财富广场办公 26 5 2 0
财富广场公寓 4 5 1 0
财富广场商铺 0 0 2 0
总共有4类 时间类别 a b c d
没有记录的就显示成 0
有的话就横向填进去
create table tb (产品名称 varchar(10),产品类型 varchar(10),产品数量 int,时间类别 varchar(10))
insert into tb values('财富广场','办公',26,'a')
insert into tb values('财富广场','办公',5,'b')
insert into tb values('财富广场','办公',2,'c')
insert into tb values('财富广场','公寓',4,'a')
insert into tb values('财富广场','公寓',5,'b')
insert into tb values('财富广场','公寓',1,'c')
insert into tb values('财富广场','商铺',2,'c')
go
--1.静态SQL
select 产品名称,产品类型,
sum(case 时间类别 when 'a' then 产品数量 else 0 end) '时间类别a',
sum(case 时间类别 when 'b' then 产品数量 else 0 end) '时间类别b',
sum(case 时间类别 when 'c' then 产品数量 else 0 end) '时间类别c',
sum(case 时间类别 when 'd' then 产品数量 else 0 end) '时间类别d'
from tb
group by 产品名称,产品类型
/**//*
产品名称 产品类型 时间类别a 时间类别b 时间类别c 时间类别d
---------- ---------- ----------- ----------- ----------- -----------
财富广场 办公 26 5 2 0
财富广场 公寓 4 5 1 0
财富广场 商铺 0 0 2 0
*/
--2.动态SQL
declare @sql varchar(8000)
set @sql = 'select 产品名称,产品类型'
select @sql = @sql + ' , sum(case 时间类别 when ''' + 时间类别 + ''' then 产品数量 else 0 end) [时间类别' + 时间类别 + ']'
from (select distinct 时间类别 from tb) as a
set @sql = @sql + ' from tb group by 产品名称,产品类型'
exec(@sql)
/**//*
产品名称 产品类型 时间类别a 时间类别b 时间类别c
---------- ---------- ----------- ----------- -----------
财富广场 办公 26 5 2
财富广场 公寓 4 5 1
财富广场 商铺 0 0 2
*/
drop table tb
产品名称 产品类型 产品数量 时间类别
财富广场办公26a
财富广场办公5b
财富广场办公2c
财富广场公寓4a
财富广场公寓5b
财富广场公寓1c
财富广场商铺2c
想转换成如下结果记录
产品名称 产品类型 (产品数量)时间类别a 时间类别b 时间类别c 时间类别d
财富广场办公 26 5 2 0
财富广场公寓 4 5 1 0
财富广场商铺 0 0 2 0
总共有4类 时间类别 a b c d
没有记录的就显示成 0
有的话就横向填进去
create table tb (产品名称 varchar(10),产品类型 varchar(10),产品数量 int,时间类别 varchar(10))
insert into tb values('财富广场','办公',26,'a')
insert into tb values('财富广场','办公',5,'b')
insert into tb values('财富广场','办公',2,'c')
insert into tb values('财富广场','公寓',4,'a')
insert into tb values('财富广场','公寓',5,'b')
insert into tb values('财富广场','公寓',1,'c')
insert into tb values('财富广场','商铺',2,'c')
go
--1.静态SQL
select 产品名称,产品类型,
sum(case 时间类别 when 'a' then 产品数量 else 0 end) '时间类别a',
sum(case 时间类别 when 'b' then 产品数量 else 0 end) '时间类别b',
sum(case 时间类别 when 'c' then 产品数量 else 0 end) '时间类别c',
sum(case 时间类别 when 'd' then 产品数量 else 0 end) '时间类别d'
from tb
group by 产品名称,产品类型
/**//*
产品名称 产品类型 时间类别a 时间类别b 时间类别c 时间类别d
---------- ---------- ----------- ----------- ----------- -----------
财富广场 办公 26 5 2 0
财富广场 公寓 4 5 1 0
财富广场 商铺 0 0 2 0
*/
--2.动态SQL
declare @sql varchar(8000)
set @sql = 'select 产品名称,产品类型'
select @sql = @sql + ' , sum(case 时间类别 when ''' + 时间类别 + ''' then 产品数量 else 0 end) [时间类别' + 时间类别 + ']'
from (select distinct 时间类别 from tb) as a
set @sql = @sql + ' from tb group by 产品名称,产品类型'
exec(@sql)
/**//*
产品名称 产品类型 时间类别a 时间类别b 时间类别c
---------- ---------- ----------- ----------- -----------
财富广场 办公 26 5 2
财富广场 公寓 4 5 1
财富广场 商铺 0 0 2
*/
drop table tb
相关文章推荐
- easyui-datagrid关于展示的字段需要进行数据类型转换的问题(自己记录备忘)
- sqlplus中怎么将你全部的操作和结果记录保存到你指定的文件里
- Sql语句在Access数据库中能查到结果, 写在程序中查不到结果(或者得到的结果全是0) --- 通配符的问题, Access的"case when"
- python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题
- mysql5.6.16下跟踪SQL查询转换的结果
- 一个sql中常遇到的表结构转换问题
- 解决同时修改同一SQL记录的问题
- Sql 在将varchar值 '21,123,.. ' 转换成数据类型 int 时失败 的问题
- 关于sql 语句 查询结果的替换问题
- 关于如何处理JSONObject.fromObject(Object obj)无法转换特殊日期(java.sql.Date,java.sql.Timestamp)格式的问题。
- SQL中显示查询结果的前几条记录
- 解决模糊查询的结果记录排序问题
- spark-sql访问hive的问题记录
- SQL 查询结果的纵向变横向排列
- sql中农历阳历之间的转换问题
- 在数据库中批量执行SQL并将结果记录到文件中
- SQL行列转换问题
- SQL 问题:已知主键id 和排序条件 这条记录的上一条或下一条记录
- Linux下,sqlplus中查询结果中文乱码问题的解决 实战
- SQL语句:把统计结果按照特定的列值转换成多列