求一个比较复杂的SQL语句,字段值作为列名的方法

有四个表A,B,C,DA表为商品分类,表结构如下idname1电子类2服务类3虚拟类B表为商品名称和价格,其中AID代表商品分类IDidAidnameprice11电脑3... 有四个表A,B,C,D
A表为商品分类,表结构如下
id name
1 电子类
2 服务类
3 虚拟类
B表为商品名称和价格,其中AID代表商品分类ID
id Aid name price
1 1 电脑 3000
2 1 鼠标 30
3 1 键盘 20
4 2 维修 50
5 3 点卡 30
C表为销售单据主表
id custom account
1 张三 3080
2 李四 80
D为单据明细表,即客户都买了什么东西,bid代表销售单主表的ID ,mid代表商品ID
id bid mid account
1 1 1 3000 --张三买了一台电脑
2 1 4 50 --张三购买了维修服务
3 1 2 30 --张三买了一个鼠标
4 2 4 50 --李四买了维修服务
5 2 3 30 --李四买了一个键盘

现在要求制作一张明细表,要求按照单据主表显示行,商品分类在购买的商品前方显示,并显示出汇总数,商品名以列的形式表现出来,列的值就是购买商品的金额.
这张表做完应该是下面这样
客户名 电子类 电脑 键盘 鼠标 服务类 维修 虚拟类 点卡
张三 3020 3000 30 50 50
李四 30 30 50 50

难点在于商品名称和购买的东西不固定.
求这个报表制作的方法 .SQL语句 存储过程 视图 什么方式都行 只要能做出来就行
数据库类型是 SQL SERVER 2008
展开
 我来答
badkano
推荐于2016-06-15 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885364
团长

向TA提问 私信TA
展开全部

什么数据库?

我现在只能给你显示成这样,是不是不太满足?就是那汇总不好汇

不过我借助了一个视图和一个declare动态执行的,没把你的内容写死

-----------搞定了---------

先创建视图

create view v_e as 

select c.custom,a.name proname,sum(d.account) as account

from a,b,c,d where a.id=b.aid and c.id=d.bid and d.mid=b.id

group by c.custom,a.name

union all

select c.custom,b.name proname,sum(d.account) as account

from a,b,c,d where a.id=b.aid and c.id=d.bid and d.mid=b.id

group by c.custom,b.name

 

 

然后

declare @sql varchar(4000)

set @sql = 'select [custom]'

select @sql = @sql + ',sum(isnull(case [proname] when '''+[name]+''' then [account] end,0)) as 

['+[name]+']'

from (select top 1000 name from 

(select name,'t1' t,id  from a

union all

select name,'t2' t,aid id from b) c

order by id,t) as a

select @sql = @sql+' from [v_e] group by [custom]'

exec(@sql)

rkc009
2013-04-18 · TA获得超过1499个赞
知道大有可为答主
回答量:2098
采纳率:60%
帮助的人:1681万
展开全部
mark! 有空来写写 你这个涉及到 行转列 如果列数 比较固定 建议用临时表 处理!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
17号观察室
2013-04-18 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1335万
展开全部
你这个是行转列的知识点 由于行值不固定 所以你犯难了 其实很简单 用游标 就能搞定 写个存储过程吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式