select a.*, b.* from 
(select top 1 车辆牌照, 汽油类型 , 加油站 from 加汽油表) a
left join
(
select isnull(sum(结余), 0) from 汽油月结余表 c where c.车辆牌照=a.车辆牌照 and c.加油站=a.加油站 and c.油气类型=a.汽油类型 + SUM(a.购油量) - sum(a.用油量) 
from 加汽油表 b where b.id <= a.id
)
on a.车辆牌照=b.车辆牌照 and a.汽油类型=b.油气类型 and a.加油站=b.加油站 and 时间 between '2010-11-1' and '2010-11-20'错误内容:
服务器: 消息 156,级别 15,状态 1
在关键字 'from' 附近有语法错误。哪里写错了?

解决方案 »

  1.   

    select a.*, b.* from 
    (select top 1 车辆牌照, 汽油类型 , 加油站 from 加汽油表) a
    left join
    (
    select isnull(sum(结余), 0) from 汽油月结余表 c where c.车辆牌照=a.车辆牌照 and c.加油站=a.加油站 and c.油气类型=a.汽油类型 + SUM(a.购油量) - sum(a.用油量) 
    from 加汽油表 b where b.id <= a.id
    )P---加上表名
    on a.车辆牌照=b.车辆牌照 and a.汽油类型=b.油气类型 and a.加油站=b.加油站 and 时间 between '2010-11-1' and '2010-11-20'
    ====
    下面的On连接部分也需要根据表名做相应变更
      

  2.   

    select a.*, b.* from 
    (select top 1 车辆牌照, 汽油类型 , 加油站 from 加汽油表) a
    left join
    (
    select isnull(sum(结余), 0) from 汽油月结余表 c where c.车辆牌照=a.车辆牌照 and c.加油站=a.加油站 and c.油气类型=a.汽油类型 + SUM(a.购油量) - sum(a.用油量) 
    from 加汽油表 b where b.id <= a.id
    ) b---按你的逻辑加上表名b
    on a.车辆牌照=b.车辆牌照 and a.汽油类型=b.油气类型 and a.加油站=b.加油站 and 时间 between '2010-11-1' and '2010-11-20'
    ====
    再看看是否报错?
      

  3.   

    left join
    (
    select isnull(sum(结余), 0) from 汽油月结余表 c where c.车辆牌照=a.车辆牌照 and c.加油站=a.加油站 and c.油气类型=a.汽油类型 + SUM(a.购油量) - sum(a.用油量) 
    from 加汽油表 b where b.id <= a.id
    ) c,道理跟a一样,要给他起个名字,而不是用b当做左连接的表名
     
      

  4.   

    修改后的SQL, 还是报错 - -!select a.*, b.* from 
    (select top 1 车辆牌照, 加油类型 , 供货商 from 加油加气表) a
    left join
    (
    select isnull(sum(结余), 0) from 油气月结余表 c where c.车辆牌照=a.车辆牌照 and c.供货商=a.供货商 and c.油气类型=a.加油类型 + SUM(购油量) - sum(用油量) 
    from 加油加气表 where id <= a.id and 车辆牌照=b.车辆牌照 and 加油类型=b.油气类型 and 供货商=b.供货商 and 时间 between '2010-11-1' and '2010-11-20'
    ) b
    on a.车辆牌照=b.车辆牌照 and a.加油类型=b.油气类型 and a.供货商=b.供货商 and a.时间 between '2010-11-1' and '2010-11-20'
      

  5.   

    最好贴出数据和希望结果。以下纯猜:
    select a.*, b.*,c.*
    from 
    (
    select top 1 车辆牌照, 汽油类型 , 加油站 from 加汽油表
    ) a
    left join 
    (
    select 车辆牌照, 汽油类型 , 加油站,isnull(sum(结余), 0) 
    from 汽油月结余表 c 
    group by 车辆牌照, 汽油类型 , 加油站
    ) c 
    on  c.车辆牌照=a.车辆牌照 and c.加油站=a.加油站 and c.油气类型=a.汽油类型 
    join 
    (
    select 车辆牌照, 汽油类型 , 加油站,SUM(a.购油量) - sum(a.用油量)
    from 加汽油表
    group by group by 车辆牌照, 汽油类型 , 加油站
    ) b
    on a.车辆牌照=b.车辆牌照 and a.汽油类型=b.油气类型 and a.加油站=b.加油站  and b.id <= a.id
    where XXXX.时间 between '2010-11-1' and '2010-11-20'  --那个表的时间???
      

  6.   

    如果要where 时间,需要先在结果集中定义出。
      

  7.   

    确实是逻辑混乱,根本就没搞清楚left join....