
2008-6-30 15:11
bokeylf
请问能在SQL实现以下结果吗?
有以下两个表
表A
Aid Aqty
1 100
表B
Bid Aid Bqty
100 1 20
101 1 40
102 1 40
通过
select a.aid,a.aqty,b.qty from a,b where a.aid=b.aid查询结果为:
Aid Aqty Bqty
1 100 20
1 100 40
1 100 40
怎样实现以下结果:
Aid Aqty Bqty
1 100 20
1 40
1 40
2008-7-1 19:39
hyxin
得到这样的结果后,只要不用第2,3个100不就可以了吗?
Aid Aqty Bqty
1 100 20
1 100 40
1 100 40
2008-7-1 21:08
xiangzi001
仅供参考……有好的方法,可以交流
select t1.aid,aqty=case when t2.bid=100 then t1.aqty
else null end,
t2.bqty
from t1,t2
where t1.aid=t2.aid
结果如下:
-------------------------------------------------------------------
aid aqty bqty
----------- ----------- -----------
1 100 20
1 NULL 40
1 NULL 40
(所影响的行数为 3 行)
2008-7-1 22:29
smthgdin
楼上的方法 缺乏灵活性,嘿嘿。
2008-7-1 23:08
kalonggood
select 表b.aid,表a.aqty,表b.bqty from 表b left join 表a
on 表a.aqty=表b.bid
2008-7-1 23:10
kalonggood
如果不要null的话,就用isnull(列名,'')转掉
2008-7-2 11:39
bokeylf
谢谢大家的回复,因为我上面只是举了简单的例子,数据不是固定的那几行了,我需要得出那样的结果的原因是需要汇总a.qty和b.qty两例的数据
2008-7-2 12:16
smthgdin
[quote]原帖由 [i]bokeylf[/i] 于 2008-7-2 11:39 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10828918&ptid=1014122][img]http://www.itpub.net/images/common/back.gif[/img][/url]
谢谢大家的回复,因为我上面只是举了简单的例子,数据不是固定的那几行了,我需要得出那样的结果的原因是需要汇总a.qty和b.qty两例的数据 [/quote]
汗~~~
没事找事做啊。没必要那样。
2008-7-2 13:59
bokeylf
楼上的,在做报表的实际应用中是有必要这样子做的。比如在ERP系统中的同一张数量生产订单对应有多张领料单数量,现在需要做一张生产订单领料明细表(需要统计生产订单数量和领料数量),如果每一行都出现生产订单数量的话这个报表肯定不好看而且在对数量汇总后,生产订单数量肯定是实际的倍数。我不知大家是否有遇到同样问题?
2008-7-2 23:11
kalonggood
上楼,那就有点看不明白你的意思啦,
想要哪个不汇总,你就用max()就是了,就只取一个了
自联连汇总值也行,只要条件列取对
2008-7-3 09:43
bokeylf
详细数据如下:
表A数据如下:
ID QTY1
18315 110
18317 24
18346 20
18355 360
表B的数据如下:
ID QTY2
18315 110
18315 -110
18315 110
18337 12
18337 12
18337 -1
18346 6
18346 14
18355 -360
18355 360
18355 360
我需要得到的结果如下:
ID QTY1 QTY2
18315 110 110
18315 -110
18315 110
18337 24 12
18337 12
18337 -1
18346 20 6
18346 14
18355 360 -360
18355 360
18355 360
Total: 514 513
[[i] 本帖最后由 bokeylf 于 2008-7-3 09:49 编辑 [/i]]
2008-7-3 23:43
cosio
A 表 left outer join B表就可以实现
2008-7-4 09:35
bokeylf
跟联接方式没有关系的
2008-7-4 09:38
smthgdin
外连接的结果还是会填充qty1的,昨晚看了一下。还没有好的办法,看看那个高手能解决。呵呵~~~
2008-7-5 10:02
Ryan-liumin
呵呵......关注高手来解决下的
2008-7-7 09:39
hxd001_810
select identity(int,0,1) num,a.id,a.qty1,b.qty2
into temp1
from a,b
where a.id=b.id
select id,qty1,qty2
from temp1 a
where not exists(select * from temp1 where id=a.id and num<a.num)
union all
select id,null,qty2
from temp1 a
where exists(select * from temp1 where id=a.id and num<a.num)
order by id
drop table temp1
返回:
id qty1 qty2
----------- ----------- -----------
18315 110 110
18315 NULL -110
18315 NULL 110
18317 NULL 12
18317 NULL -1
18317 24 12
18346 20 6
18346 NULL 14
18355 NULL 360
18355 NULL 360
18355 360 -360
(所影响的行数为 11 行)
[[i] 本帖最后由 hxd001_810 于 2008-7-7 09:44 编辑 [/i]]
2008-7-7 10:15
bokeylf
呵呵,问题终于让高手解决了。谢谢啦!
页:
[1]

Powered by ITPUB论坛