sql结果记录横向转换问题

转载 2007年09月25日 13:51:00

目前结果记录如下
产品名称 产品类型 产品数量  时间类别
财富广场办公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

[MSSQL]SQL 查询结果的纵向变横向排列

/*create table BookLibary([图书馆] varchar(10), [科目] varchar(10), [数量] int) insert into BookLibary se...

关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)

相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已。我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的。...

关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)

相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已。我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的。...

关于oracle 12c SQL语句执行结果与11g不一致的问题

将原有的系统迁移到oracle 12c上面,版本是12.1.0.2,总是有各种问题出现,不得不说,目前的版本真是个坑。 开发一条sql语句,insert .....select形式,单独执行selec...

Sql语句中,Contains与Like查询结果不相同的问题

我们知道,要模糊查询数据表的话,一般会用到Like语法,而对数据表相应的字段进行全文索引之后,还可以使用速度更快的Contains方法、 但是,我发现,分别使用这两个方法查询出来的结果不一致! ...

php使用odbc执行复杂函数遇到的问题,sql语句直接在sqlserver数据库中运行有结果,使用php总是为空

排查问题1、$res = odbc_exec($this->conn,$sql);查看执行是否正确。使用 $errorcode=odbc_error($res); var_dump(odbc_erro...

通过转成SQL来进行查询,解决hql不能在distinct,group by结果集上使用count的问题

public Long getDataTotal(String hql,Map alias,Object[] args) { QueryTranslatorImpl queryTranslato...

MySQL如何将select子查询结果横向拼接后插入数据表中

我的要求具体是这样的。我有数据表audit的结构如下:+-----------+------------+------+-----+-------------------+-------+ | Fie...

投票问卷结果漂亮的横向显示,jquery简单实现。

做了一个简单的投票问卷管理模块,最后需要实现投票结果横向的显示,而且要求是按题来统计并显示百分比,每个选项投票数。 网上找来找去都没有找到合适自己的,于是自己使用很笨的方法实现了一个。高手路...

DataTable纵向记录转换成横向列显示,动态新增列及填充数据

DataTable dt = Maticsoft.DBUtility.DbHelperOra.Query(QuerySql).Tables[0]; #region 创建新的DataTable ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql结果记录横向转换问题
举报原因:
原因补充:

(最多只允许输入30个字)