日期:2014-05-19  浏览次数:20660 次

关于左连接的问题,详情请进,有点难度。
表t1,有列:   供应商   货号   生产数量
                      A             001         200
                      B             001         30
                      B             002         500
                      B             003         100
表t2   有列:   货号   订货数量  
                      001         500
                      002         700  
希望左连接成如下的形式:(t1   left   join   t2   on   t1.货号=t2.货号)

供应商     货号     订货数量     生产数量
A               001       500                 200
B               001       -                     30         (正常情况下,本行的订货数量也会被连接成500)
B               002       700                 500
B               003                             100    
怎样去掉那行的数量置为null

------解决方案--------------------
明白了,按gahade(与君共勉) ( ) 的吧

-----

select 供应商,
a.货号,
case when 生产数量=(select max(生产数量) from t1 where a.货号=t1.货号) then 订货数量 else NULL end as '订货数量 ',
生产数量
from t1 a
left join t2 on a.货号=t2.货号
------解决方案--------------------
告诉大鸟们去掉的条件是什么
------解决方案--------------------
那就需要一个排序字段

drop table t1,t2
go
create table t1(供应商 varchar(10),货号 varchar(10),生产数量 int)
insert into t1
select 'A ', '001 ',200
union all select 'B ', '001 ',30
union all select 'C ', '001 ',200
union all select 'B ', '002 ',500
union all select 'B ', '003 ',100

create table t2(货号 varchar(10),订货数量 int)
insert into t2
select '001 ',500
union all select '002 ',700

alter table t1 add id int identity(1,1)

select 供应商,
a.货号,
case when id=(select min(id) from t1 where a.货号=t1.货号) then 订货数量 else NULL end as '订货数量 ',
生产数量
from t1 a
left join t2 on a.货号=t2.货号
/*
供应商 货号 订货数量 生产数量
---------- ---------- ----------- -----------
A 001 500 200
B 001 NULL 30
C 001 NULL 200
B 002 700 500
B 003 NULL 100

(所影响的行数为 5 行)
*/
------解决方案--------------------
create table t1(供应商 varchar(10),货号 varchar(10), 生产数量 int)
create table t2(货号 varchar(10),订货数量 int)