mysql语句问题

mysql语句问题,mysql,Mysql,我有一个MySQL语句,在我的查询程序(Navicat)中运行良好,但是当我尝试将其放入crystal中的命令时,它抛出了一个错误 声明是 set @rownum=0 Select @rownum := @rownum +1 as ranknum , cust_name , count(distinct callref) as rank from opencall where logdate like '%/08/2011%' and companyname = "Mc

我有一个MySQL语句,在我的查询程序(Navicat)中运行良好,但是当我尝试将其放入crystal中的命令时,它抛出了一个错误

声明是

set @rownum=0
Select 
  @rownum := @rownum +1 as ranknum
  , cust_name
  ,  count(distinct callref) as rank 
from opencall 
where logdate like '%/08/2011%' 
  and companyname = "McDonald's Nederland" 
group by cust_name 
order by rank desc
错误是

无法从数据库检索数据。详细信息42000[MYSQL][ODBC 3.51驱动程序][mysqld-4.0.16]您的SQL语法有错误。查看与您的MYSQL服务器版本对应的手册,以了解在“选择@rownum:=@rownum+1作为ranknum、cust_name、count(dist[数据库供应商代码:1064])附近使用的正确语法


您需要使用

set @rownum=0;
SELECT
  @rownum := @rownum +1 as ranknum
  , cust_name
  , COUNT(distinct callref) as rank 
FROM opencall 
WHERE logdate LIKE '%/08/2011%'    <<-- ?? dates are stored YYYY/MM/DD in a DB.
  AND companyname = "McDonald's Nederland" 
GROUP BY cust_name 
ORDER BY ranknum DESC   <<-- ranknum, **not** rank
你确定你不是说:

SELECT
  @rownum := @rownum +1 as ranknum
  , cust_name
  , COUNT(distinct callref) as rank 
FROM opencall  
CROSS JOIN (SELECT @rownum := 0) AS initializaton
WHERE logdate BETWEEN '2011-08-01' AND '2011-08-31' 
  AND companyname LIKE "McDonald's Nederland"  <<-- like is case-insensitive
GROUP BY cust_name                             <<-- `=` can be case sensitive
ORDER BY ranknum DESC
选择
@rownum:=@rownum+1作为ranknum
,客户名称
,将(不同的callref)计数为秩
来自opencall
交叉连接(选择@rownum:=0)作为初始化
其中,日志日期介于“2011-08-01”和“2011-08-31”之间

公司名称如“麦当劳荷兰”的否决票不是我的,但请永远不要说“这是一个错误”不要确切地说是哪一个错误。始终记得引用准确的错误消息。添加了一些消息。抱歉没有意识到我的错误会激怒足够多的人来否决我的投票。请解释声明的预期结果。@Annette:这不是“riling”的问题人们。常识是,如果你需要帮助,你需要发布错误消息,否则人们怎么知道问题出在哪里?我需要Crystal Reports中的子报表中的ranknumber。首先感谢你的帮助。我已经尝试了这两种方法,并且得到了与前面提到的错误相同的结果,仅在示例a或“@rownum”中接近:=0)作为初始化,其中logdate(如第二个应答中的“%/08/”)不能使用logdate作为logdate执行此操作,尽管保存的日期时间实际上是一个varcharfield@Annette,第一个查询不能在一条语句中发出,您需要将它们作为两条单独的语句执行。e、 g.:query.sql.text:=“set@rownum=0;”;query.execSQL;query.sql.text:=“选择…”;query.open;在varchar中输入日期是个坏主意,这就是
date
datetime
的用途:-)是的,我完全同意,但是这不是我的数据库,而是一个客户端,不幸的是我对此无能为力。我已经表明了我的想法,但我仍坚持下去,必须用我所拥有的来工作:(
SELECT
  @rownum := @rownum +1 as ranknum
  , cust_name
  , COUNT(distinct callref) as rank 
FROM opencall  
CROSS JOIN (SELECT @rownum := 0) AS initializaton
WHERE logdate BETWEEN '2011-08-01' AND '2011-08-31' 
  AND companyname LIKE "McDonald's Nederland"  <<-- like is case-insensitive
GROUP BY cust_name                             <<-- `=` can be case sensitive
ORDER BY ranknum DESC