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.站次

解决方案 »

  1.   

    1,k284/281次(成都-->上海)空调快,     15:28 ,第三日07:08 ,39.40'    ,2620
    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表中得到的 到站时刻    发车时刻  公里数 旅时 天数  来显示动态信息问题有点多,大哥们可以慢慢来,万分感谢:-)
      

  2.   

    select a.车次ID,c.发车时刻,'第'+d.天数+'天'+d.到站时刻,datediff(,?,?),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
      

  3.   

    select a.车次ID,c.发车时刻,'第'+d.天数+'天'+d.到站时刻,case when d.到站时刻>c.发车时刻 then hour(d.到站时刻-c.发车时刻)+24*d.天数 else hour(23:59-c.发车时刻)+24*(d.天数-1)+hour(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
      

  4.   

    调试基本通过,再次感谢各位大哥:=)过程中有又产生两个问题,给大哥们看看
    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中就不能呢?菜鸟问题多,看又是一堆问号,惭愧,希望大哥们赐教,万分感激:)
      

  5.   

    case when datediff(mi,a.发车时刻,b.到站时刻)>0 then cast(24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(2))else cast(24*(b.天数-a.天数-1)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(2))
    end as 旅时
      

  6.   

    create view 视图名
    as
    begin
    select 站次,经由站,
           isnull(convert(char(5),到站时刻,108),'起点') AS 到站时刻 ,
           isnull(convert(char(5),发车时刻,108),'终点') AS 发车时刻 ,
           公里数,天数
    from message
    end呢???
      

  7.   

    create view 视图名
    asselect * from (
    select 站次,经由站,
           isnull(convert(char(5),到站时刻,108),'起点') AS 到站时刻 ,
           isnull(convert(char(5),发车时刻,108),'终点') AS 发车时刻 ,
           公里数,天数
    from message) tem呢?
      

  8.   

    case when datediff(mi,a.发车时刻,b.到站时刻)>0 then cast(24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(2))else cast(24*(b.天数-a.天数-1)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(2))
    end as 旅时
      

  9.   

    then cast(24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(10))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(10))+''''
    else cast(24*(b.天数-a.天数-1)+datediff(hour,a.发车时刻,b.到站时刻) as varchar(10))+'.'+(cast(datediff(minute,a.发车时刻,b.到站时刻) as varchar(10))+'''' 
    end as 旅时 
      

  10.   

    select a.车次ID,
           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
      

  11.   

    问题2终于OK了,再次感谢大力大哥!的确从视图的概念也能解释得通,但为社么在查询时却可以正常的显示,而绑定时却要出现类型不符的错呢,语句isnull(convert(char(5),到站时刻,108),'起点') 在查询器查询效果一切正常,我不明白,请大侠们再赐教!问题1调试中,万分感谢各位大哥鼎力相助!
      

  12.   

    请问如果b.到站时刻.minute<a.发车时刻.minute,那么datediff(minute,a.发车时刻,b.到站时刻)返回社么?
       调试中出现了负数,所以如果返回的是补数的话,那么是以社么社么数的补数呢?
    以下写了个计算逻辑,麻烦大哥闷看看对不对!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;
             }
          }
      

  13.   

    查询程序:
    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
    旅时无法正常显示,请教各位大哥!
      

  14.   

    else cast(24*(b.天数-a.天数)+datediff(hour,a.发车时刻,b.到站时刻)-1 as varchar(2))+'.'+cast(60+datediff(minute,a.发车时刻,b.到站时刻) as varchar(4))+''''
    end as 旅时,
      

  15.   

    总算对了,看来都对datediff(minute,a.发车时刻,b.到站时刻) 理解错了,呵呵:)case when datediff(minute,a.发车时刻,b.到站时刻)>=0 
    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 旅时,