sql高手请进,sql出现怪事
ckls出库历史
FA A2 A8
1 素围巾 10
2 V领男套衫 10
3 V领抽条男套背心 10
4 扇贝网眼围巾 10
5 超薄精纺纯绒披肩 10
6 小八字领长袖明门平摆女衬衫 10
7 大八字领长袖明门圆摆女衬衫 20
8 自带领翻花半袖女套衫 20
9 大圆领抽条女套衫 20
10 V领半袖男套衫 6
11 自带领翻花半袖女套衫 19
12 超薄精纺纯绒披肩 10
13 素围巾 10
14 V领男套衫 10
15 扇贝网眼围巾 2
16 V领抽条男套背心 1
xsls 入库历史
FA A2 A8
1 V领半袖男套衫 6
2 自带领翻花半袖女套衫 20
3 超薄精纺纯绒披肩 10
4 素围巾 10
5 V领男套衫 10
6 V领抽条男套背心 1
7 扇贝网眼围巾 2
Select A.A2 As PM,Sum(A.A8) As CK,Sum(B.A8) As XS
From CKLS As A Left Join XSLS As B
On (A.A2=B.A2) And (A.A8=B.A8)
Group By A.A2
问题一:执行完语句后 xs这一列 数据就不对,
pm ck xs
1 V领半袖男套衫 6 6
2 V领抽条男套背心 11 1
3 V领男套衫 20 20
4 超薄精纺纯绒披肩 20 20
5 大八字领长袖明门圆摆女衬衫 20
6 大圆领抽条女套衫 20
7 扇贝网眼围巾 12 2
8 素围巾 20 20
9 小八字领长袖明门平摆女衬衫 10
10 自带领翻花半袖女套衫 39 20
///////////////////////////////////////////////////////////////
如果执行这一句,结果更可怕:
Select A.A2 As PM,Sum(A.A8) As CK,Sum(B.A8) As XS
From CKLS As A Left Join XSLS As B
On (A.A2=B.A2) { 如果少了这句 And (A.A8=B.A8) }
Group By A.A2
pm ck xs
1 V领半袖男套衫 6 6
2 V领抽条男套背心 11 2 //这里有点变化1--》2
3 V领男套衫 20 20
4 超薄精纺纯绒披肩 20 20
5 大八字领长袖明门圆摆女衬衫 20
6 大圆领抽条女套衫 20
7 扇贝网眼围巾 12 4
//这里有点 变化2--》4
8 素围巾 20 20
9 小八字领长袖明门平摆女衬衫 10
10 自带领翻花半袖女套衫 39 40 //这里有点变化20--》40
问题二:我标记的为什么会有变化
请问各位:这里的sql语句执行出来的怎么是这样的呢?
我想要得到的,大家从sql中可以看出来:
以出库为基准,把出库和销售同名的货物作个统计sum()
那位高手可以给出sql也可以,
问题点数:100、回复次数:9Top
1 楼zyj320621(小朱)回复于 2002-07-23 17:47:09 得分 0
什么怪事 怎么不说Top
2 楼handsome1234(我太菜了,)回复于 2002-07-23 17:49:52 得分 0
问题一,二,就是怪事啊Top
3 楼CoolSlob()回复于 2002-07-23 17:54:41 得分 10
问题1:
Select A.A2 As PM,Sum(A.A8) As CK,Sum(B.A8) As XS
From CKLS As A Left Join XSLS As B<---------你使用的是Left Join
On (A.A2=B.A2) And (A.A8=B.A8)
Group By A.A2
你可以先理解一下Left Join,Right Join, Inner Join之间的关系!!!
这不是怪事,!是你自己的SQL语句写错了!
问题2:我就没心事去看了,你列出的数据太乱了,呵呵:-)
Top
4 楼CoolSlob()回复于 2002-07-23 17:55:28 得分 10
问题1:
Select A.A2 As PM,Sum(A.A8) As CK,Sum(B.A8) As XS
From CKLS As A Left Join XSLS As B<---------你使用的是Left Join
On (A.A2=B.A2) And (A.A8=B.A8)
Group By A.A2
你可以先理解一下Left Join,Right Join, Inner Join之间的关系!!!
这不是怪事,!是你自己的SQL语句写错了!
问题2:我就没心事去看了,你列出的数据太乱了,呵呵:-)
Top
5 楼findcsdn(searchcsdn)回复于 2002-07-23 18:15:19 得分 30
试一试下面的sql语句如何;在access中应该是正确的。
select b.a2,a.xs,b.ck from (select a2,sum(a8) as xs from xsls group by a2 ) a right join ( select a2,sum(a8) as ck from ckls group by a2) b on a.a2=b.a2Top
6 楼Bes96261(秋水孤鶩)回复于 2002-07-23 18:19:30 得分 10
樓上的結果應該是對的,因為使用Group by 時作統計得出什麼所有的結果。Top
7 楼Bes96261(秋水孤鶩)回复于 2002-07-23 18:20:32 得分 10
打錯字了,Group by 最好不要用在行與行作統計的時候Top
8 楼zyj320621(小朱)回复于 2002-07-23 18:28:01 得分 10
我看了你的SQL语句 肯定会有这样的结果 主要还是你对表Join理解的事
你用下列语句执行 再一点点地加上条件 看看变化
1
Select A.A2 As PM, b.A2 as PM1 ,Sum(A.A8) As CK,Sum(B.A8) As XS
From CKLS As A Left Join XSLS As B
On (A.A2=B.A2)
Group By A.A2,b.a2
2
Select distinct A.A2 As PM,Sum(A.A8) As CK,Sum(B.A8) As XS
From CKLS As A Left Join XSLS As B
On (A.A2=B.A2)
Group By A.A2
3 加入下列方法试试
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] JOIN
Top
9 楼chao_jian(猫)回复于 2002-07-23 19:28:30 得分 10
“以出库为基准,把出库和销售同名的货物作个统计sum()”
把Left Join改成Inner Join试试。Top
10 楼fermium(列御寇)回复于 2002-07-24 00:35:06 得分 10
问题2
你把Sum()和Group By去掉,再数一下有多少条记录就明白了。
其实问题还是在Left上Top




