有个比较辣手的问题请教:)

fishmans 2003-01-14 10:42:06
有三个表,分别是[消费表]、[价格表]、[账单表]
消费表记录着每个顾客的消费明细,关键字为账单编号和商品编码
价格表则是每件商品的价格,关键字为商品编码
账单表里是每个顾客的消费总账,关键字为账单编号
现在要根据每个账单号统计顾客的单项消费

不知如何做?
...全文
32 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishmans 2003-01-17
  • 打赏
  • 举报
回复
请问那个inner join 是做什么用的??
fling_boy 2003-01-16
  • 打赏
  • 举报
回复
access:
select a.账单编号, sum(iif(b.商品类型='烟类', c.数量 * c.价格,0)) as 烟类,
sum(iif(b.商品类型='烟类', c.数量 * c.价格,0)) as 酒类,
sum(iif(b.商品类型='烟类', c.数量 * c.价格,0)) as 茶类
from 消费表 c inner join 账单表 a on a.账单编号=c.账单编号
inner join 价格表 b on b.商品名称=c.商品名称
where a.账单编号='20030101001'
group by a.账单编号


我用了汉语字段,你应该可以看明白。
复制过来都乱了,你自己再复制到分析器里看吧。
上面写的是固定的,如果类型不固定,那你要先找出所有类型再动态生成查询语句了,不过也不难。
fling_boy 2003-01-16
  • 打赏
  • 举报
回复
sql server :

select a.账单编号, sum(case when b.商品类型='烟类' then c.数量 * c.价格 else 0 end) as 烟类,
sum(case when b.商品类型='酒类' then c.数量 * c.价格 else 0 end) as 酒类,
sum(case when b.商品类型='茶类' then c.数量 * c.价格 else 0 end) as 茶类
from 消费表 c inner join 账单表 a on a.账单编号=c.账单编号
inner join 价格表 b on b.商品名称=c.商品名称
where a.账单编号='20030101001'
group by a.账单编号
fling_boy 2003-01-16
  • 打赏
  • 举报
回复
明白意思了,这是交叉数据报表。
如果你的商品类型是固定的几类还是比较好写的,如果类别不固定,那就复杂了,我先给你写个固定的.过一会给你.
fishmans 2003-01-16
  • 打赏
  • 举报
回复
写得有点乱,慢慢看就好了
fishmans 2003-01-16
  • 打赏
  • 举报
回复
OK,大致上就是这样了!

比如说一个顾客的消费记录是这样的:
在账单表里:
账单编号:[szdbh]:20030101001
结账时间:[djzsj]:2003-01-01 12:14:24
应收款: [nysk]:235
实收款: [nss]:230
在消费表里:
账单编号:[szdbh]:20030101001
商品名称:[spmc]:香烟
数量: [nsl]: 2
价格: [ndj]: 10
账单编号:[szdbh]:20030101001
商品名称:[spmc]:黑烟
数量: [nsl]: 2
价格: [ndj]: 10
账单编号:[szdbh]:20030101001
商品名称:[spmc]:白酒
数量: [nsl]: 2
价格: [ndj]: 100
账单编号:[szdbh]:20030101001
商品名称:[spmc]:红酒
数量: [nsl]: 2
价格: [ndj]: 100
账单编号:[szdbh]:20030101001
商品名称:[spmc]:绿茶
数量: [nsl]: 2
价格: [ndj]: 10
账单编号:[szdbh]:20030101001
商品名称:[spmc]:红茶
数量: [nsl]: 1
价格: [ndj]: 5

价格表里是:
商品名称:[spmc]:香烟
商品类型:[spxl]:烟类
商品名称:[spmc]:黑烟
商品类型:[spxl]:烟类
商品名称:[spmc]:红酒
商品类型:[spxl]:酒类
商品名称:[spmc]:白酒
商品类型:[spxl]:酒类
商品名称:[spmc]:绿茶
商品类型:[spxl]:茶类
商品名称:[spmc]:红茶
商品类型:[spxl]:茶类

得到的结果应该是:
账单编号 烟类消费 茶类消费 酒类消费
20030101001 20 15 200

这样应该很了解了吧??
fling_boy 2003-01-15
  • 打赏
  • 举报
回复
你最好列出表结构的关键字段和想返回结果的样子。
你上面说要单项消费统计,现在又要不同的商品统计在一条记录里。
是不是这样:
单号 商品A 商品B 商品C 商品D ...
001 100 200 100 10
002 30 120 90 50
..
..

fishmans 2003-01-15
  • 打赏
  • 举报
回复
回复人: fling_boy(andy) ( ) 信誉:100

账单表在这个查询时是没什么用,他里记录了结账时间,这样就不会连几年前的账都翻出来了
fishmans 2003-01-15
  • 打赏
  • 举报
回复
可能前面没有说清楚,其实我的目的是想查询每个单号里的各种商品的消费统计,比如说一个顾客买了一瓶酒,过了一会又要了一瓶相同的酒,那么在消费表里就会有两条记录是同一件商品,同样的还可能分两次买了两包相同的烟等等
在账单表里只记录了这个顾客的消费总额,现在用户需要根据单号知道一个单中不同种类的商品的消费统计,如果用分组统计的话不同的商品统计不会在一个记录中,不方便显示在网格上,我的目的就是想用一条语句进行分组统计,并使不同的商品统计在同一条记录中返回。
redwrite 2003-01-14
  • 打赏
  • 举报
回复
up
fling_boy 2003-01-14
  • 打赏
  • 举报
回复
看不出来你的账单表在这个查询里有什么用。
fling_boy 2003-01-14
  • 打赏
  • 举报
回复
select a.商品,sum(c.商品价格)
from 消费表 a inner join 价格表 b on a.商品编号=b.商品编号
where a.帐单编号=''
group by a.商品
znboy 2003-01-14
  • 打赏
  • 举报
回复
up

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧