ITPUB论坛 » MS SQL Server » 请问能在SQL实现以下结果吗?
新一届的微软MVP评选已经开始,欢迎各位推荐!
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论坛