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后,感觉这个方法还挺管用的。...

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

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

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

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

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

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

使用HIBERNATE的SQL查询并将结果集自动转换成POJO

在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List,本文讨论如何在这种情况下让HIBERNATE直...

任意一条查询sql转换为查询结果集对应的数目

原思路: 像括号配对一样,如果遇见select 就入栈,如果遇见from就出栈,直到栈为空,取得此时的位置,进行字符串截取。 实现方法:遇见字符s并且连续后5个字符elect 就+1,遇见字符f并且...
  • topwqp
  • topwqp
  • 2014-04-27 18:49
  • 1836

在数据库中批量执行SQL并将结果记录到文件中

项目中有一个步骤:数据移植。数据移植要迁移很多的表,迁移完之后我们要看一下我们迁移的表的记录数对不对。假如说有一百多张表,不可能每次都一张表一张表的去查询然后记录,这时候就得有一个脚本可以自动执行。我...

使用HIBERNATE的SQL查询并将结果集自动转换成POJO

在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List,本文讨论如何在这种情况下让HIBERNATE直...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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