SQL查询语句,请高手帮忙解决

tjbus2008 2009-04-23 01:24:56
公里 燃料 收入 日期 线路
50 25 70 2009-1-1 632
65 35 110 2009-1-1 633
20 20 20 2009-1-2 632
30 35 40 2009-1-2 633
45 45 30 2009-1-3 632
70 90 65 2009-1-3 633
50 50 50 2009-2-3 632
60 60 60 2009-2-3 633
90 43 50 2009-2-1 632
30 30 30 2009-2-1 633
30 30 30 2009-2-2 632
40 40 40 2009-2-2 633
想得到结果如下:
日期 线路 1月份公里 2月份公里 对比 幅度
1日 632 50 90 -40 %
2日 632 20 30 -10 %
3日 632 45 50 -10 %
........................................
日期 线路 1月份收入 2月份收入 对比 幅度
......
日期 线路 1月份燃料 2月份燃料 对比 幅度

急用,谢谢!!!
...全文
103 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwp9868cws 2009-04-23
  • 打赏
  • 举报
回复
好有挑战的东东,学习学习
  • 打赏
  • 举报
回复
乱窜学习,顺便捞分
wartim 2009-04-23
  • 打赏
  • 举报
回复
一些交叉表可以尝试用报表设计器自动算
jiesure 2009-04-23
  • 打赏
  • 举报
回复
贴上oracle 下的代码 ,跟这个有点不同

create table BUSTB
(
BS_KM NUMBER,
BS_OIL NUMBER,
BS_MONEY NUMBER,
BS_DATE DATE,
BS_PATH VARCHAR2(10)
)
tablespace USERS
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);

prompt Disabling triggers for BUSTB...
alter table BUSTB disable all triggers;
prompt Loading BUSTB...
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (50, 25, 70, to_date('01-01-2009', 'dd-mm-yyyy'), '632');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (65, 35, 110, to_date('01-01-2009', 'dd-mm-yyyy'), '633');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (20, 20, 20, to_date('02-01-2009', 'dd-mm-yyyy'), '632');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (30, 35, 40, to_date('02-01-2009', 'dd-mm-yyyy'), '633');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (45, 45, 30, to_date('03-01-2009', 'dd-mm-yyyy'), '632');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (70, 90, 65, to_date('03-01-2009', 'dd-mm-yyyy'), '633');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (50, 50, 50, to_date('03-02-2009', 'dd-mm-yyyy'), '632');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (60, 60, 60, to_date('03-02-2009', 'dd-mm-yyyy'), '633');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (90, 43, 50, to_date('01-02-2009', 'dd-mm-yyyy'), '632');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (30, 30, 30, to_date('01-02-2009', 'dd-mm-yyyy'), '633');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (30, 30, 30, to_date('02-02-2009', 'dd-mm-yyyy'), '632');
insert into BUSTB (BS_KM, BS_OIL, BS_MONEY, BS_DATE, BS_PATH)
values (40, 40, 40, to_date('02-02-2009', 'dd-mm-yyyy'), '633');
commit;

select to_char(bs_date, 'DD'),
bs_path,
sum(case
when to_char(bs_date, 'MM') = '1' then
bs_km
else
0
end) as 一月份公里,
sum(case
when to_char(bs_date, 'MM') = '2' then
bs_km
else
0
end) as 二月份公里,
(sum(case
when to_char(bs_date, 'MM') = '1' then
bs_km
else
0
end) - sum(case
when to_char(bs_date, 'MM') = '2' then
bs_km
else
0
end)) as 对比
from bustb
group by bs_path, to_char(bs_date, 'DD')

wxg22526451 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzxap 的回复:]
不明白, 每日怎么对应月份的公里数
[/Quote]
//应该是交叉表的效果,
1月份1号的公里数,
1月份2号的公里数..
zzxap 2009-04-23
  • 打赏
  • 举报
回复
不明白, 每日怎么对应月份的公里数
xiaojing7 2009-04-23
  • 打赏
  • 举报
回复
旋风后面蹭分
zzxap 2009-04-23
  • 打赏
  • 举报
回复
参照楼上,接分
wxg22526451 2009-04-23
  • 打赏
  • 举报
回复
幅度?怎么算的?
--> Test Data: @T
declare @T table ([公里] int,[燃料] int,[收入] int,[日期] datetime,[线路] varchar(10))
insert into @T
select 50,25,70,'2009-1-1',632 union all
select 65,35,110,'2009-1-1',633 union all
select 20,20,20,'2009-1-2',632 union all
select 30,35,40,'2009-1-2',633 union all
select 45,45,30,'2009-1-3',632 union all
select 70,90,65,'2009-1-3',633 union all
select 50,50,50,'2009-2-3',632 union all
select 60,60,60,'2009-2-3',633 union all
select 90,43,50,'2009-2-1',632 union all
select 30,30,30,'2009-2-1',633 union all
select 30,30,30,'2009-2-2',632 union all
select 40,40,40,'2009-2-2',633

--select * from @T
--Code
select 日期=day(日期),线路,
[1月份公里]=sum(case when month(日期)=1 then 公里 else 0 end),
[2月份公里]=sum(case when month(日期)=2 then 公里 else 0 end),
[对比]=sum(case when month(日期)=1 then 公里 else 0 end)-
sum(case when month(日期)=2 then 公里 else 0 end)
from @T group by 线路,day(日期)
order by 线路

select 日期=day(日期),线路,
[1月份收入]=sum(case when month(日期)=1 then 收入 else 0 end),
[2月份收入]=sum(case when month(日期)=2 then 收入 else 0 end),
[对比]=sum(case when month(日期)=1 then 收入 else 0 end)-
sum(case when month(日期)=2 then 收入 else 0 end)
from @T group by 线路,day(日期)
order by 线路

select 日期=day(日期),线路,
[1月份燃料]=sum(case when month(日期)=1 then 燃料 else 0 end),
[2月份燃料]=sum(case when month(日期)=2 then 燃料 else 0 end),
[对比]=sum(case when month(日期)=1 then 燃料 else 0 end)-
sum(case when month(日期)=2 then 燃料 else 0 end)
from @T group by 线路,day(日期)
order by 线路
--Drop

--Result
/*
日期 线路 1月份公里 2月份公里 对比
----------- ---------- ----------- ----------- -----------
1 632 50 90 -40
2 632 20 30 -10
3 632 45 50 -5
1 633 65 30 35
2 633 30 40 -10
3 633 70 60 10

(所影响的行数为 6 行)

日期 线路 1月份收入 2月份收入 对比
----------- ---------- ----------- ----------- -----------
1 632 70 50 20
2 632 20 30 -10
3 632 30 50 -20
1 633 110 30 80
2 633 40 40 0
3 633 65 60 5

(所影响的行数为 6 行)

日期 线路 1月份燃料 2月份燃料 对比
----------- ---------- ----------- ----------- -----------
1 632 25 43 -18
2 632 20 30 -10
3 632 45 50 -5
1 633 35 30 5
2 633 35 40 -5
3 633 90 60 30
*/
qq306850549 2009-04-23
  • 打赏
  • 举报
回复
写个存贮过程吧...那样简单点...
wjn161 2009-04-23
  • 打赏
  • 举报
回复
建议楼主去SQL SERVER区。那里SQL语句高手多

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧