用row_number函数一直报错,请求帮忙看下报错原因

select *

,b.COUNTRY||'-'||b.CITY  as '地区'

,row_number () over (order by cost) as '排名'

from PRODUCT a 

left join PRODUCER b

on a.producerid=b.producerid

企业微信截图_15833787128763.png

qq61925843 发布于 2020-3-5 11:57
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
黄多鸭SamirLv4见习互助
发布于2020-3-6 14:54

帆软自带的数据库是 SQLite 没有 rownum 概念,可取巧实现以上排序的功能。


代码如下:

select 

*,

pdr1.COUNTRY||'-'||pdr1.CITY  as '地区',

((select count(*) from PRODUCT pdt2 where pdt2.COST<pdt1.COST) + 1) as '排名'

from PRODUCT pdt1

left join PRODUCER pdr1 on pdt1.PRODUCERID=pdr1.PRODUCERID

order by pdt1.COST asc


排序思路:计算某个产品的 COST 大于其他多少个产品的 COST。

最佳回答
0
shirokoLv6资深互助
发布于2020-3-5 12:12

这个*得指名A.*还是B.*

  • qq61925843 qq61925843(提问者) select row_number () over (order by b.cost) as \'排名\' from PRODUCT a left join PRODUCER b on a.producerid=b.producerid 不用*也也一样报错
    2020-03-05 15:03 
  • shiroko shiroko 回复 qq61925843(提问者) 你数据库是oracle吗
    2020-03-05 16:35 
  • qq61925843 qq61925843(提问者) 回复 shiroko 就是帆软内部的新建查询,我用oracle读取语句无异常
    2020-03-05 21:35 
  • shiroko shiroko 回复 qq61925843(提问者) over只能在oracle用
    2020-03-06 08:08 
最佳回答
0
sayLv6初级互助
发布于2020-3-5 15:23

sqlite 貌似没有row_number ;

从你的sql来看,是不是需要一个“排名”字段来存储order by cost后的序号?

select 

(select count(*) from (select *

,b.COUNTRY||'-'||b.CITY  as '地区'

from PRODUCT a 

left join PRODUCER b

on a.producerid=b.producerid order by a.cost) b  where a.cost >= b.cost) as "排名"

  ,* 

from (select *,b.COUNTRY||'-'||b.CITY  as '地区'

from PRODUCT a left join PRODUCER b

on a.producerid=b.producerid order by a.cost) as a 

order by cost;

不知道能不能满足?



最佳回答
0
L大大Lv7高级互助
发布于2020-3-6 14:57

sqlserver是支持row_number的,

你这是什么数据库。

最佳回答
0
cd_cwLv6初级互助
发布于2020-3-6 15:00
  • 6关注人数
  • 1554浏览人数
  • 最后回答于:2020-3-6 15:00
    请选择关闭问题的原因
    确定 取消
    返回顶部