select  
 tw_104.DEPCD as ID
,tw_104.HINCD as 商品CD
,tw_104.KANRICD as 管理CD
,ISNULL(tw_104.KIKISCD,0) as  期階層
,GI19TM_002.calcdy as 出荷日
,tw_104.OLDSKADY as 元出荷日
,ISNULL(tw_104.SKAKBN,0) as 出荷区分
,ISNULL(tw_104.SKASRY,0) as 出荷数from  
(select DEPCD
,HINCD
,KANRICD 
,SKADY
,KIKISCD 
,OLDSKADY
,ISNULL(SKAKBN,0) as SKAKBN
,sum(ISNULL(SKASRY,0)) as SKASRYfrom GI19TW_104 where SKAKBN ='0'
group by DEPCD,HINCD,KANRICD,KIKISCD,OLDSKADY,SKAKBN,SKADY) as tw_104  
right outer join GI19TM_002 ontw_104.SKADY=GI19TM_002.calcdy  
where  
GI19TM_002.KASHOCD='021'
and GI19TM_002.KASHOKBN='2'
and GI19TM_002.calcdy between '20070501' and '20070930'这是我现在sql语句,,得到结果的一部分如下ID       商品CD    管理CD  区分           日历       开始日   区分2     金额
NULL NULL NULL 0 20070501 NULL 0 0
096 1213A001 1000001 0 20070502 20090909 0 200
NULL NULL NULL 0 20070503 NULL 0 0
097 1213A002 1000001 0 20070504 20090908 0 400
NULL NULL NULL 0 20070505 NULL 0 0
NULL NULL NULL 0 20070506 NULL 0 0
NULL NULL NULL 0 20070507 NULL 0 0-----------------------------------------------------------------------------------
ID 096 和 097 是从别的表里取出来的。 ID 是NULL的时候  是和日历表作右连接得到的。(上面蓝色部分)想到的结果是;ID       商品CD    管理CD  区分 开始日   区分2     金额   进行group by如果不一样 就从红色部分 日历等于20070501开始到20070930 排列   
期望结果如下ID       商品CD    管理CD  区分           日历       开始日   区分2     金额
096 1213A001 1000001 0 20070501 NULL 0 0
096 1213A001 1000001 0 20070502 20090909 0 200
096 1213A001 1000001 0 20070503 NULL 0 0
096 1213A001 1000001 0 20070504 NULL 0 0
096 1213A001 1000001 0 20070505 NULL 0 0
                                一直到
096 1213A001 1000001 0 20070930 NULL 0 0097 1213A002 1000001 0 20070501 NULL 0 0
097 1213A002 1000001 0 20070502 NULL 0 0
097 1213A002 1000001 0 20070503 NULL 0 0
097 1213A002 1000001 0 20070504 20090908 0 400
097 1213A002 1000001 0 20070505 NULL 0 0
                               一直到
097 1213A002 1000001 0 20070930 NULL 0 0
不知道我说的大家明白了吗  希望大家在我的sql修改。。真的摆脱了

解决方案 »

  1.   

    这个说的是有点长  不过摆脱你了。。我想了一个下午。。还是实现不了  就是只要group by不一样的话。。就要重日期20070501到20070930排一次 
    ID    商品CD   管理CD   区分     日历       开始日      区分2     金额
    096 1213A001 1000001    0    20070501    NULL        0        0
    096 1213A001 1000001    0    20070502   20090909     0       200
    096 1213A001 1000001    0    20070503    NULL        0        0
    096 1213A001 1000001    0    20070504    NULL        0        0
    096 1213A001 1000001    0    20070505    NULL        0        0
      一直到
    096 1213A001 1000001    0     20070930   NULL        0        0
    097 1213A002 1000001    0     20070501   NULL        0        0
    097 1213A002 1000001    0     20070502   NULL        0        0
    097 1213A002 1000001    0     20070503   NULL        0        0
    097 1213A002 1000001    0     20070504   20090908    0       400
    097 1213A002 1000001    0     20070505   NULL        0        0
      一直到
    097 1213A002 1000001    0     20070930   NULL        0        0
      

  2.   

    szstephenzhou
     我也没办法啊。sql语句太多了。 可是项目要求就这样。。哎干IT的都是眼泪。。还望大虾们帮帮忙实现一下
      

  3.   

    参考这个帖子,给出表结果,测试数据及想要结果。http://topic.csdn.net/u/20100716/19/6f132f16-20e4-418c-8dee-b99d5f86d320.html?72912