SELECT 
CASE WHEN GROUPING(data_fclb.发车日期)=1 THEN '合计'  ELSE convert(varchar(10),data_fclb.发车日期,120) END 发车日期, 
CASE WHEN GROUPING(data_ydxx_s.到货公司)=1 THEN '小计' ELSE data_ydxx_s.到货公司 END 到货公司,
SUM(data_ydxx_s.现付中转费) AS 现付中转费,
SUM(data_ydxx_s.未付中转费) AS 未付中转费, 
SUM(data_ydxx_s.已收) AS 已收, 
SUM(data_ydxx_s.提付) AS 提付, 
SUM(data_ydxx_s.月结) AS 月结, 
SUM(data_ydxx_s.回单结) AS 回单结
FROM data_ydxx_s INNER JOIN
      data_fclb ON data_fclb.运单编号 = data_ydxx_s.运单编号
WHERE (data_fclb.发车日期 BETWEEN '2007-06-09' AND '2007-06-30') 
GROUP BY  data_fclb.发车日期,data_ydxx_s.到货公司 WITH ROLLUP得出的结果是:收货日期  到货公司现付中转费未付中转费已收    提付     月结     回单结
2007-06-09  长沙 270 0 1470 9496 0 0
2007-06-09  怀化 75 0 55 834 0 0
2007-06-09  吉首 0 0 90 350 0 0
2007-06-09  岳阳 115 0 465 2245 0 0
2007-06-09  小计 460 0 2080 12925 0 0
2007-06-10  长沙 25 2218 1272 10038 1036 0
2007-06-10  岳阳 377 0 320 2955 110 0
2007-06-10  小计 402 2218 1592 12993 1146 0
2007-06-11  长沙 165 0 2540 10378 0 0
2007-06-11  怀化 80 48 550 3279 78 0
2007-06-11  吉首 25 0 205 1270 20 0
2007-06-11  岳阳 160 35 560 3179 0 0
2007-06-11  小计 430 83 3855 18106 98 0...2007-06-29  长沙 162 269 2113 10116 247 0
2007-06-29  怀化 76 0 370 955 24 0
2007-06-29  吉首 0 6 70 1590 8 0
2007-06-29  岳阳 120 680 440 3959 90 0
2007-06-29  小计 358 955 2993 16620 369 0
2007-06-30  长沙 410 407 1607 6420 200 0
2007-06-30  怀化 0 114 170 1195 100 0
2007-06-30  吉首 0 18 10 125 0 0
2007-06-30  岳阳 140 46 224 2267 196 0
2007-06-30  小计 550 585 2011 10007 496 0
合计        小计 15290 16538 65983 335667 22020    150
期望的结果:收货日期    线路  现付中转费  未付中转费  已收   提付    月结   回单结
2007-06-09  长沙 270    0      1470   9496   0 0
2007-06-09  怀化 75    0      55    834   0 0
2007-06-09  吉首 0    0      90    350   0 0
2007-06-09  岳阳 115    0      465    2245   0 0
            小计 460    0      2080    12925   0 0
2007-06-10  长沙 25    2218      1272    10038   1036 0
2007-06-10  岳阳 377    0      320    2955   110 0
            小计 402    2218      1592    12993   1146 0
2007-06-11  长沙 165    0      2540    10378   0 0
2007-06-11  怀化 80    48      550    3279   78 0
2007-06-11  吉首 25    0      205    1270   20 0
2007-06-11  岳阳 160    35      560    3179   0 0
            小计 430    83      3855    18106   98 0...2007-06-29  长沙 162    269      2113    10116   247 0
2007-06-29  怀化 76    0      370    955   24 0
2007-06-29  吉首 0    6      70    1590   8 0
2007-06-29  岳阳 120    680      440    3959   90 0
            小计 358    955      2993    16620   369 0
2007-06-30  长沙 410    407      1607    6420   200 0
2007-06-30  怀化 0    114      170    1195   100 0
2007-06-30  吉首 0    18      10    125   0 0
2007-06-30  岳阳 140    46      224    2267   196 0
            小计 550    585      2011    10007   496 0
合计         15290    16538      65983  335667   22020  150
而且我在里面还要加一个条件我这里有7条线,但是其中有一条线路还分2个,其他6条线路就按照字段‘到货公司’分别,其中到长沙的分为直达和中转两类,按货物的终点站区分,
到货公司='长沙' and 终点站='长沙市' 属于直达按一条线路汇总,线路显示“长沙直达”
到货公司='长沙' and 终点站<>'长沙市' 属于直达按一条线路汇总,线路显示“长沙中转”

解决方案 »

  1.   

    SELECT 
    CASE WHEN GROUPING(data_fclb.发车日期)=1 THEN '合计'  ELSE convert(varchar(10),data_fclb.发车日期,120) END 发车日期, 
    CASE WHEN GROUPING(data_ydxx_s.到货公司)=1 THEN '小计' ELSE data_ydxx_s.到货公司 END 到货公司,
    SUM(data_ydxx_s.现付中转费) AS 现付中转费,
    SUM(data_ydxx_s.未付中转费) AS 未付中转费, 
    SUM(data_ydxx_s.已收) AS 已收, 
    SUM(data_ydxx_s.提付) AS 提付, 
    SUM(data_ydxx_s.月结) AS 月结, 
    SUM(data_ydxx_s.回单结) AS 回单结
    FROM data_ydxx_s INNER JOIN
          data_fclb ON data_fclb.运单编号 = data_ydxx_s.运单编号
    WHERE (data_fclb.发车日期 BETWEEN '2007-06-09' AND '2007-06-30') 
    GROUP BY  data_fclb.发车日期,data_ydxx_s.到货公司 WITH ROLLUP
    HAVING GROUPING(收货日期)=1 or GROUPING(到货公司)=0  --试试
      

  2.   

    其他的先不管,帮你改格式SELECT 
    CASE WHEN GROUPING(data_fclb.发车日期)=1 THEN '合计' 
     WHEN GROUPING(data_fclb.到货公司)=1 THEN ''
     ELSE convert(varchar(10),data_fclb.发车日期,120) END 发车日期, 
    CASE WHEN GROUPING(data_fclb.发车日期)=1 THEN '' 
     WHEN GROUPING(data_fclb.到货公司)=1 THEN '小计'
    ELSE data_ydxx_s.到货公司 END 到货公司,
    SUM(data_ydxx_s.现付中转费) AS 现付中转费,
    SUM(data_ydxx_s.未付中转费) AS 未付中转费, 
    SUM(data_ydxx_s.已收) AS 已收, 
    SUM(data_ydxx_s.提付) AS 提付, 
    SUM(data_ydxx_s.月结) AS 月结, 
    SUM(data_ydxx_s.回单结) AS 回单结
    FROM data_ydxx_s INNER JOIN
          data_fclb ON data_fclb.运单编号 = data_ydxx_s.运单编号
    WHERE (data_fclb.发车日期 BETWEEN '2007-06-09' AND '2007-06-30') 
    GROUP BY  data_fclb.发车日期,data_ydxx_s.到货公司 WITH ROLLUP
      

  3.   

    长沙直达中转的问题,不知道表结构猜一下SELECT 
    CASE WHEN GROUPING(发车日期)=1 THEN '合计' 
     WHEN GROUPING(data_fclb.到货公司)=1 THEN ''
     ELSE 发车日期 END 发车日期, 
    CASE WHEN GROUPING(发车日期)=1 THEN '' 
     WHEN GROUPING(到货公司)=1 THEN '小计'
    ELSE 到货公司 END 到货公司,
    SUM(现付中转费) AS 现付中转费,
    SUM(未付中转费) AS 未付中转费, 
    SUM(已收) AS 已收, 
    SUM(提付) AS 提付, 
    SUM(月结) AS 月结, 
    SUM(回单结) AS 回单结
    FROM  (
    SELECT 
    convert(varchar(10),data_fclb.发车日期,120) 发车日期, 
    CASE WHEN data_fclb.到货公司='长沙' and data_fclb.终点站='长沙市' then '长沙直达'
       WHEN data_fclb.到货公司='长沙' and data_fclb.终点站<>'长沙市' then '长沙中转'
       else data_fclb.到货公司 END 到货公司,
    data_ydxx_s.现付中转费,
    data_ydxx_s.未付中转费, 
    data_ydxx_s.已收, 
    data_ydxx_s.提付, 
    data_ydxx_s.月结, 
    data_ydxx_s.回单结
    FROM data_ydxx_s INNER JOIN
          data_fclb ON data_fclb.运单编号 = data_ydxx_s.运单编号
    WHERE (data_fclb.发车日期 BETWEEN '2007-06-09' AND '2007-06-30') 
    ) as t
    GROUP BY  发车日期,到货公司 WITH ROLLUP
      

  4.   

    数据结构是:表 data_ydxx_s运单编号    nvarchar 50
    到货公司    nvarchar 50
    终点站      nvarchar 50
    现付中转费  money    8 
    未付中转费  money    8
    已收        money    8
    提付        money    8
    月结        money    8
    回单结      money    8表 data_fclb发车单号    nvarchar 50
    发车日期    datetime 8
    运单编号    nvarchar 50
    TO Haiwer(海阔天空) 
    我的意思你基本上看懂了,但是给的代码还是错误的
      

  5.   

    SELECT 
    CASE WHEN GROUPING(data_fclb.发车日期)=1 THEN '合计' 
         WHEN GROUPING(data_ydxx_s.到货公司)=1 THEN '' 
         ELSE convert(varchar(10),data_fclb.发车日期,120)
         END 发车日期, 
    CASE WHEN GROUPING(data_ydxx_s.到货公司)=1 THEN '小计' 
         ELSE data_ydxx_s.到货公司
         END 到货公司,
    SUM(data_ydxx_s.现付中转费) AS 现付中转费,
    SUM(data_ydxx_s.未付中转费) AS 未付中转费, 
    SUM(data_ydxx_s.已收) AS 已收, 
    SUM(data_ydxx_s.提付) AS 提付, 
    SUM(data_ydxx_s.月结) AS 月结, 
    SUM(data_ydxx_s.回单结) AS 回单结
    FROM (SELECT 运单编号,
                 CASE WHEN 到货公司='长沙' and 终点站='长沙市' THEN '长沙直达'
                      WHEN 到货公司='长沙' and 终点站<>'长沙市' THEN '长沙中转'
                      END 到货公司,
                 终点站,
                 现付中转费,
     未付中转费,
     已收,      
     提付,      
     月结,      
     回单结
         FROM @data_ydxx_s) data_ydxx_s INNER JOIN
          @data_fclb data_fclb ON data_fclb.运单编号 = data_ydxx_s.运单编号
    WHERE (data_fclb.发车日期 BETWEEN '2007-06-09' AND '2007-06-30') 
    GROUP BY  data_fclb.发车日期,data_ydxx_s.到货公司 WITH ROLLUP