A表
单号 款号 系列号 数量 生产日期
A1211 F11 2042N 10 20100901
A1212 F12 2042N 20 20100901
A1211 F11 3044N 10 20100901
A1213 F13 2042N 10 20100901
A1211 F11 2042N 20 20100902
A1214 F11 2011A 10 20100901
A1212 F11 2045N 10 20100903
A1213 F12 2045N 20 20100903B表
单号 款号 系列号 数量 出货日期
A1211 F11 2042N 10 20100910
A1212 F12 2042N 20 20100912
A1211 F11 3044N 10 20100912
A1213 F13 2042N 10 20100912
A1214 F11 2011A 10 20100912
A1212 F11 2045N 10 20100912
A1213 F12 2045N 20 20100912
A1211 F22 2042N 10 20100913从A表中取出相同生产日,相同系列号,不同单号的数据,得到下列表
单号 款号 系列号 数量 生产日期
A1211 F11 2042N 10 20100901
A1212 F12 2042N 20 20100901
A1213 F13 2042N 10 20100901
A1212 F11 2045N 10 20100903
A1213 F12 2045N 20 20100903
然后与B表关联,把B表中与A表中所取出数据对应单号,系列号的出货日期取出,在B表中有的单号,系列号对应两个不同的出货期,就取第一个(比如A1211,2042N对应20100910和20100913两个出货期,那就取第一个)得到下列表
单号 款号 系列号 数量 生产日期 出货日期
A1211 F11 2042N 10 20100901 20100910
A1212 F12 2042N 20 20100901 20100912
A1213 F13 2042N 10 20100901 20100912
A1212 F11 2045N 10 20100903 20100912
A1213 F12 2045N 20 20100903 20100912这样的功能怎么实现?

解决方案 »

  1.   

    从A表中取出相同生产日,相同系列号,不同单号的数据:
    select distinct a1.d_id,a1.k_id,a1.j_id,a1.num,a1.time1  from A as a1 ,A as b1 where a1.time1=b1.time1 and a1.j_id = b1.j_id and a1.d_id <> b1.d_id order by j_id
      

  2.   


    从A表中取出相同生产日,相同系列号,不同单号的数据:
    select distinct a1.d_id,a1.k_id,a1.j_id,a1.num,a1.time1 into #temp_A from A as a1 ,A as b1 where a1.time1=b1.time1 and a1.j_id = b1.j_id and a1.d_id <> b1.d_id order by j_id
    然后与B表关联,把B表中与A表中所取出数据对应单号,系列号的出货日期取出,在B表中有的单号,系列号对应两个不同的出货期而得到下列表:
    select distinct b1.d_id,b1.k_id,b1.j_id,b1.num,b1.time2 into #temp_B from #temp_A as a1 ,B as b1 where a1.d_id = b1.d_id and a1.j_id = b1.j_id 
    delete from #temp_B  where time2 in (select b1.time2 from #temp_B as b1 ,#temp_B as b2  where b1.d_id = b2.d_id and b1.j_id = b2.j_id and b1.time2 > b2.time2)
    select * from #temp_B order by j_idA1211 F11 2042N 10 20100910
    A1212 F12 2042N 20 20100912
    A1213 F13 2042N 10 20100912
    A1213 F12 2045N 20 20100912
    A1212 F11 2045N 10 20100912
      

  3.   

    select t0.单号,t0.款号,t0.系列号,t0.数量,t0.生产日期,t2.出货日期 from A t0 
    Inner Join (select 系列号,生产日期 from A group by 系列号,生产日期 having count(*) >1)t1 ON t0.生产日期=t1.生产日期 And t0.系列号=t1.系列号
    inner Join (select 单号,系列号,Min(出货日期) 出货日期 from b  Group By 单号,系列号) t2 on t0.单号=t2.单号 and t0.系列号 = t2.系列号
      

  4.   

    A表缺少一个主键或一个唯一约束.
    所以,就A表的设计进行搜索,需要建立一个临时表,这个临时表设置一个主键或唯一约束
    然后写一个类似的sql
    select distinct a1.d_id,a1.k_id,a1.j_id,a1.num,a1.time1 from A as a1 ,A as b1 where a1.time1=b1.time1 and a1.j_id = b1.j_id and a1.d_id <> b1.d_id and a1.id<>b1.id order by j_id
    说明:id为主键或唯一约束的列名