首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

又一个汇总的SQL语句 ORARichard(没钱的日子.) 快来,该如何处理

2012-02-06 
又一个汇总的SQL语句ORARichard(没钱的日子......) 快来SELECTCASEWHENGROUPING(data_fclb.发车日期)1THE

又一个汇总的SQL语句 ORARichard(没钱的日子......) 快来
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     长沙27001470949600
2007-06-09     怀化7505583400
2007-06-09     吉首009035000
2007-06-09     岳阳1150465224500
2007-06-09     小计460020801292500
2007-06-10     长沙25221812721003810360
2007-06-10     岳阳377032029551100
2007-06-10     小计402221815921299311460
2007-06-11     长沙165025401037800
2007-06-11     怀化80485503279780
2007-06-11     吉首2502051270200
2007-06-11     岳阳16035560317900
2007-06-11     小计43083385518106980

...

2007-06-29     长沙1622692113101162470
2007-06-29     怀化760370955240
2007-06-29     吉首0670159080
2007-06-29     岳阳1206804403959900
2007-06-29     小计3589552993166203690
2007-06-30     长沙410407160764202000
2007-06-30     怀化011417011951000
2007-06-30     吉首0181012500
2007-06-30     岳阳1404622422671960
2007-06-30     小计5505852011100074960
合计                 小计15290165386598333566722020         150


期望的结果:

收货日期         线路     现付中转费     未付中转费     已收       提付         月结       回单结
2007-06-09     长沙270       0           1470       9496     00
2007-06-09     怀化75       0           55       834     00
2007-06-09     吉首0       0           90       350     00
2007-06-09     岳阳115       0           465       2245     00
                        小计460       0           2080       12925     00
2007-06-10     长沙25       2218           1272       10038     10360
2007-06-10     岳阳377       0           320       2955     1100


                        小计402       2218           1592       12993     11460
2007-06-11     长沙165       0           2540       10378     00
2007-06-11     怀化80       48           550       3279     780
2007-06-11     吉首25       0           205       1270     200
2007-06-11     岳阳160       35           560       3179     00
                        小计430       83           3855       18106     980

...

2007-06-29     长沙162       269           2113       10116     2470
2007-06-29     怀化76       0           370       955     240
2007-06-29     吉首0       6           70       1590     80
2007-06-29     岳阳120       680           440       3959     900
                        小计358       955           2993       16620     3690
2007-06-30     长沙410       407           1607       6420     2000
2007-06-30     怀化0       114           170       1195     1000
2007-06-30     吉首0       18           10       125     00
2007-06-30     岳阳140       46           224       2267     1960
                        小计550       585           2011       10007     4960
合计                 15290       16538           65983     335667     22020     150


而且我在里面还要加一个条件我这里有7条线,但是其中有一条线路还分2个,其他6条线路就按照字段‘到货公司’分别,其中到长沙的分为直达和中转两类,按货物的终点站区分,
到货公司= '长沙 '   and   终点站= '长沙市 '   属于直达按一条线路汇总,线路显示“长沙直达”
到货公司= '长沙 '   and   终点站 <> '长沙市 '   属于直达按一条线路汇总,线路显示“长沙中转”

[解决办法]
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 --试试
[解决办法]
长沙直达中转的问题,不知道表结构猜一下

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



[解决办法]
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

热点排行