先有 一个 A表的 数据  
codeCD  有 24位 和 14位 的  对于24位的CD 一个24位codecd包含的 所有商品 是 放在一个箱子里 
对于 每个14位的codecd  对应的商品 的箱数计算方法是  订货数除一箱商品个数 
flag1 0:代表未送货  1:代表已经送货
flag2 0:代表不验货  1:代表 要抽样验货  供货商号     CodeCD                      商品CD    一箱商品个数   订货数    Flag1 Flag2  
0314      001473000900200138947810    1234       3            2       0     0
0314      001473000900200138947810    1235       4            3       0     0
0314      14973735126211              1234       2            10      0    0        
0314      14955249200397              1567       8            16      0     0
0314      001473002900200138947813    9876       2             1      0     1
0314      001473002900200138947813    4566       6             2      0     1
0314      001473002900200138947813    766        12            4      0     1
0314      001473002900200138947813    876        60            10     0     1  
0314      24976881244751              asd        4             8      1     0
0314      14973766000948              854        6             18     1     0
0314      14973766000894              987R       1             3      1     1
0314      001473023800200138947799    876d       6             3      1     0
0314      001473023800200138947799    as6d       2             1      1     0
0314      001473023800200138947799    oi6d       2             2      1     0
0314      001473023800200138947797    poiu       10            5      1     1 我想 统计 这个 供货商 应该送多少箱商品  要区分未送货 和送货完了 
其中 对于未送货的部分 不用区分 CodeCD长度和 flag2 直接统计箱数 就行 
对于 送货完了的部分 要根据CodeCD 和 Flag2 来分别统计 箱数 ?????
有点复杂 求 Sql 语句??
怎么分组?
上面求出 结果 应该是 
供应商   箱数           送货状态
0314    1+5+2+1      未送货 
0314      2+3         送货完了    code14位    不检品
0314      3            送货完了   code14位    检品
0314      1            送货完了   code24位    不检品
0314      1            送货完了   code24位    检品sql

解决方案 »

  1.   

    select
       供货商号,
       sum(case when Flag1=0 then 1 else 0 end) as '未送货',
       sum(case when flag1=1 and flag2=0 and len(CodeCD)=14 then 订货数/一箱商品个数  else 0 end) as '送货完了    code14位    不检品'
    ...
    from
       tb
    group by
       供货商号
      

  2.   

    中间的不写了 其实最主要的还是 SUM(CASE WHEN ...)
      

  3.   


    对于未送货的  codeCD 是24 位的 相同的CD 是按一箱 计算  codeCD 是14位的 是 订货数除一箱个数  然后 求 加和 的 ? 这个没有 计算对吧?? 
      

  4.   


    24的话 条件就是len(CodeCD)=24  then 一箱商品个数
      

  5.   

     14 位就 len(CodeCD)=14 then 订货数/一箱商品个数
      

  6.   

    未送货的不知道是不是14位和24位的都加一起 如果是这样的话 第一句就有点问题。sum(case when Flag1=0 and  len(CodeCD)=14  then 订货数/一箱商品个数 else 0 end)
    +
    sum(case when Flag1=0 and  len(CodeCD)=24  then 一箱商品个数 else 0 end)就不写了 关键是知道怎么实现的 以后这样的问题就不用问了
      

  7.   

    不好意思 可能 我没说明白  对于未送货的  要求出 所有的箱数 
    对于 COde24位cd     一个cODECD 24位的 会有复数条数据   这样 会计算为 一箱 
    对于 codeCD 14 位的 按 订货数 除 一箱商品个数  得出一个箱数 
    然后 这两个数 相加 就是 这个供货商 对于未送货的 商品的 箱数 ??
    求sql??
    先  谢谢了