读书人

又一个汇总的SQL语句 ORARichard(没

发布时间: 2012-02-06 15:52:45 作者: rapoo

又一个汇总的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

读书人网 >SQL Server

热点推荐