日期:2014-05-18  浏览次数:20391 次

这样的情况如何进行分类统计
表1:
custNo       name       cost     prodName
1                 mike       3.7       面包
1                 lisa       5.8       水壶
1                 马华       30         雨伞
2                 何峰       17         面包
2                 张东       13         鞋
.....

表2:
prodType         prodName
食物                   面包
食物                   香肠
日用品               水壶
日用品               雨伞
日用品               鞋
....

需要统计结果为:
custNo           食物         日用品
1                     3.7           35.8
2                     17             13

这种统计怎么写sql啊?


------解决方案--------------------
declare @sql varchar(8000)
set @sql= ' '

select @sql=@sql+ ',[ '+prodType+ ']=sum(case prodType when ' ' '+prodType+ ' ' ' then cost else 0 end) '
from 表2 group by prodType

set @sql= 'select custNo '+@sql+ ' from 表1 a,表2 b where a.prodName=b.prodName group by custNo '
exec(@sql)
------解决方案--------------------
create table #tmp (custNo int,prodType varchar(20),cost decimal(9,1))
insert #tmp select custNo,prodType,sum(cost) cost
from (select a.custNo,a.name,a.cost,a.prodName,b.prodType
from 表1 a inner join 表2 b on a.prodName=b.prodName) c
group by custNo,prodType order by custNo
select distinct a.custNo,(select cost from #tmp where custNo=a.custNo and prodType= '食物 ') 食物,
(select cost from #tmp where custNo=a.custNo and prodType= '日用品 ') 日用品
from #tmp a inner join (select distinct custNo from 表1) b on a.custNo=b.custNo
drop table #tmp