select a.车次ID,
车次='不知道从哪里取',
a.到站时刻,
a.发车时刻,
旅时=24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻),
里程=b.公里数-a.公里数
from (
select * from 表A where 经由站='德阳'
) as a,
(
select * from 表A where 经由站='广元'
) as b
where a.车次ID=b.车次ID
and a.站次<b.站次
车次='不知道从哪里取',
a.到站时刻,
a.发车时刻,
旅时=24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻),
里程=b.公里数-a.公里数
from (
select * from 表A where 经由站='德阳'
) as a,
(
select * from 表A where 经由站='广元'
) as b
where a.车次ID=b.车次ID
and a.站次<b.站次
2,1354/1351次(成都-->上海)普快 , 18:50 ,第三日10:42 ,39.52' ,2351
3,k292/289次(成都-->上海)空调快, 14:55 ,第三日05:01 ,38.06' ,2351
5,1216/1217次(成都-->上海西)空调普快,11:40 ,第三日11:47 ,48.06' ,2687
8,T8(成都-->北京西)新空特快, 09:00 ,第二日12:26 ,27.26' ,2042
118,K118(成都-->北京西)新空快速, 22:08 ,第三日05:50 ,31.42 ,2791
54,T54/51(乌鲁木齐-->上海)新空特快, 10:07 ,第三日13:03 ,50.56' ,4077结果和上面的几乎一样,只是B表是个静态的表,只是直达信息,我是要通过任意两站的查询
所以,除了 车次ID 车次不变外,要加上从A表中得到的 到站时刻 发车时刻 公里数 旅时 天数 来显示动态信息问题有点多,大哥们可以慢慢来,万分感谢:-)
from a,(select 车次ID from b where 经由站='江油') c,(select 车次ID from b where 经由站='上海') d
where a.车次ID=c.车次ID and c.车次ID=d.车次ID
from a,(select 车次ID from b where 经由站='江油') c,(select 车次ID from b where 经由站='上海') d
where a.车次ID=c.车次ID and c.车次ID=d.车次ID
1、‘旅时’字段,我本意是要得到如15.25'来表示15小时25分于是对修改代码如下:
case when datediff(minute,a.发车时刻,b.到站时刻)>0
then 24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻)+'.'+
datedif(minute,a.发车时刻,b.到站时刻)else 24*(b.天数-a.天数-1)+datediff(hour,a.发车时刻,b.到站时刻)+'.'+datediff(minute,a.发车时刻,b.到站时刻)
end as 旅时但通不过,错误信息:将 varchar 值 '.' 转换为数据类型为 int 的列时发生语法错误。
请问怎样做才能达到那种效果呢?2、问题几乎也是以上问题,查询语句如下:
select 站次,经由站,
isnull(convert(char(5),到站时刻,108),'起点') AS 到站时刻 ,
isnull(convert(char(5),发车时刻,108),'终点') AS 发车时刻 ,
公里数,天数
from message 本意是在为空的日期型字段上用'起点''终点'来代替,我在sql server 200查询分析器中调好了的,显示也达到了我要的效果,可是在vs.net中和datagrid绑定后却出错,原以为可能SQL语法上有区别,于是做成存储过程,结果一样。
于是将AS 到站时刻 改为--->AS 到站时间
AS 发车时刻 改为--->AS 到站时间
调试是可以通过了,可显示结果却是 原来的 '到站时刻''发车时刻'在datagrid中显示字段名内容为空,而在原表的最后产生新的两个字段:到站时间、到站时间 内容正确
但这样一来却使我的显示效果变了型,在数据转化部分始终弄不懂,明明在SQL中是好好的,为社么做成存储过程也不行呢,书上说存储过程是在服务器上运行的,也就是说可以得到查询分析器中显示的效果,为社么在datagrid中就不能呢?菜鸟问题多,看又是一堆问号,惭愧,希望大哥们赐教,万分感激:)
end as 旅时
as
begin
select 站次,经由站,
isnull(convert(char(5),到站时刻,108),'起点') AS 到站时刻 ,
isnull(convert(char(5),发车时刻,108),'终点') AS 发车时刻 ,
公里数,天数
from message
end呢???
asselect * from (
select 站次,经由站,
isnull(convert(char(5),到站时刻,108),'起点') AS 到站时刻 ,
isnull(convert(char(5),发车时刻,108),'终点') AS 发车时刻 ,
公里数,天数
from message) tem呢?
end as 旅时
else cast(24*(b.天数-a.天数-1)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(10))+'.'+(cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(10))+''''
end as 旅时
c.发车时刻,
'第'+d.天数+'天'+d.到站时刻,
case when d.到站时刻>c.发车时刻 then datediff(hh,c.发车时刻,d.到站时刻)+24*(d.天数-c.天数) else datediff(hh,c.发车时刻,'23:59')+24*(d.天数-c.天数-1)+datediff(hh,'00:00'd.到车时刻)end as 旅时,
d.公里-c.公里
from a,
(select 车次ID from b where 经由站='江油') c,
(select 车次ID from b where 经由站='上海') d
where a.车次ID=c.车次ID and c.车次ID=d.车次ID
调试中出现了负数,所以如果返回的是补数的话,那么是以社么社么数的补数呢?
以下写了个计算逻辑,麻烦大哥闷看看对不对!if(en.day==st.day)
{if(en.minute>=st.minute)
{en.hour-st.hour;
en.minute-st.minute
}
else
{en.hour-st.hour-1;
en.minute-st.minute+补数+60;
}
}
else
{if(en.minute>=st.minute)
{en.hour-st.hour+24*(en.day-st.day);
en.minute-st.minute;
}
else
{en.hour-st.hour+24*(en.day-st.day)-1;
en.minute-st.minute+补数+60;
}
}
isnull(convert(char(5),a.发车时刻,108),'终点') AS 发车时刻 ,
isnull(convert(char(5),a.到站时刻,108),'起点') AS 到站时刻 ,case when datediff(minute,a.发车时刻,b.到站时刻)>=0
then cast(24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(4))+''''else cast(24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻)-1 as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(4))+''''
end as 旅时,
里程=b.公里数-a.公里数
from (select * from message2 where 经由站='德阳') as a,
(select * from message2 where 经由站='广元') as b,
(select * from checi) as c
where a.车次ID=b.车次ID and a.车次ID=c.车次ID and a.站次<b.站次得到结果:
车次 到站时刻 发车时刻 旅时 里程
k284/281次(成都-->上海)空调快 16:27 16:26 5.273' 258
1354/1351次(成都-->上海)普快 15:48 15:43 5.267' 258
k292/289次(成都-->上海)空调快 20:03 19:59 3.*' 258
K118(成都-->北京西)新空快速 23:00 22:58 3.*' 253
旅时无法正常显示,请教各位大哥!
end as 旅时,
then cast(24*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻)/60 as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻)%60 as varchar(2))+''''else cast((1440*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻))/60 as varchar(2))+'.'+cast((1440*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻))%60 as varchar(2))+''''
end as 旅时,