求一SQL,两表联查后,行有重复出现

hiaming 2012-03-28 09:23:48
先看测试环境

CREATE TABLE [dbo].[订单](
[ID] [int] IDENTITY(1,1) NOT NULL,
[单号] [nchar](10) NULL,

) ON [PRIMARY]
CREATE TABLE [dbo].[订单分录](
[ID] [int] IDENTITY(1,1) NOT NULL,
[单号] [nchar](10) NULL,
[营业点] [nchar](10) NULL,
[商品分类] [nchar](10) NULL,
[商品名] [nchar](10) NULL,

) ON [PRIMARY]
CREATE TABLE [dbo].[收款分录](
[ID] [int] IDENTITY(1,1) NOT NULL,
[单号] [nchar](10) NULL,
[付款方式] [nchar](10) NULL,
[金额] [nchar](10) NULL,
) ON [PRIMARY]

INSERT INTO [订单] ([单号])
VALUES ('2001')

INSERT INTO [订单分录] ([单号],[营业点],[商品分类] ,[商品名])
VALUES (2001,'1号','服装','上衣')
INSERT INTO [订单分录] ([单号],[营业点],[商品分类] ,[商品名])
VALUES (2001,'1号','服装','裤子')
INSERT INTO [订单分录] ([单号],[营业点],[商品分类] ,[商品名])
VALUES (2001,'1号','服装','帽子')

INSERT INTO [收款分录] ([单号],[付款方式] ,[金额])
VALUES (2001,'现金',50)
INSERT INTO [收款分录] ([单号],[付款方式] ,[金额])
VALUES (2001,'现金',82)


我的目的是两个报表:1.按[营业点][商品分类]汇总金额; 2.按[营业点][付款方式]汇总金额


select --distinct
a.单号,a.商品分类,a.商品名,b.付款方式,b.金额
from
订单分录 a --inner join 订单 c on a.单号=c.单号
left join 收款分录 b on a.单号=b.单号 and

我用上面的方法联查时,发现会多出行(返回了2*3=6行),统计的金额自然就多出来了。
显然上面的方式是不正确的。

这个数据库是别人开发的,不能改变设计。
求高手指点解决方案。
...全文
210 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiaming 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinajiyong 的回复:]
SQL code

SELECT a.营业点,a.商品分类,SUM(CAST(b.金额 AS int)) 汇总金额 FROM [订单分录] a,[收款分录] b WHERE a.ID=b.ID GROUP BY a.营业点,a.商品分类
[/Quote]
也不行啊,你这个,刚好我的两个测试表ID自动编号字段相同,所以看起来成功了。
事实上,我把

delete from [订单分录]
INSERT INTO [订单分录] ([单号],[营业点],[商品分类] ,[商品名])

VALUES (2001,'1号','服装','上衣')
INSERT INTO [订单分录] ([单号],[营业点],[商品分类] ,[商品名])
VALUES (2001,'1号','服装','裤子')
INSERT INTO [订单分录] ([单号],[营业点],[商品分类] ,[商品名])
VALUES (2001,'1号','服装','帽子')

改变了自动编号字段后,发现不对了
hiaming 2012-03-28
  • 打赏
  • 举报
回复
高手真多,谢谢 AcHerat老大,虽然我订单表里没有你给的字段
hiaming 2012-03-28
  • 打赏
  • 举报
回复
回得慢了,还没看到Chinajiyong老大的回复。
Chinajiyong 结果正确。谢谢了。
我试试在我的真实项目里行不行
AcHerat 2012-03-28
  • 打赏
  • 举报
回复
对于第二个报表统计是可以根据营业点的编码做统计

但对于 1.按[营业点][商品分类]汇总金额 这个应该没有方法统计,因为不知道到底是哪些商品销售的金额

2:


select a.[营业点],b.[付款方式],sum(b.[金额]) [总金额]
from [订单] a join [收款分录] b on a.[营业点] = b.[营业点]
group by a.[营业点],b.[付款方式]
hiaming 2012-03-28
  • 打赏
  • 举报
回复
是啊,所以很麻烦。我自己想不出怎么做了。

原意是: 一个订单,可能有多样商品,同时,一个单子付款时,可以一部份现金加一部分银行刷卡的方式.
两位有别的解决思路吗?
EnForGrass 2012-03-28
  • 打赏
  • 举报
回复

SELECT a.营业点,a.商品分类,SUM(CAST(b.金额 AS int)) 汇总金额 FROM [订单分录] a,[收款分录] b WHERE a.ID=b.ID GROUP BY a.营业点,a.商品分类
ixkixkix 2012-03-28
  • 打赏
  • 举报
回复
收款分录,没有营业点,也没有商品,

连卖的是什么都不知道?
AcHerat 2012-03-28
  • 打赏
  • 举报
回复
第二张表和第三张表没有对应的关系关联,如何做统计,又怎么能知道怎样统计。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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