我有一个通过ODBC连接拉入excel的mysql查询。此查询按照其提取的数据按降序排列每个组的前5个,并为其提供排名编号(按组中每个唯一项的值的顺序为1到5)。
- 问题是当数据导入Excel时,'rank'字段的所有值都设置为1(它们应在1到5之间变化),而不是正确的数字。我尝试了很多东西,但无法弄清楚为什么excel会这样做。
我正在使用mysql,并且excel 2010。
我尝试过的事情:
1)创建新连接
2)将排名输出转换为char
3)将等级与文本串联为字符串。
4)删除工作表并重新创建。
5)更改sql中的列顺序
感谢您提供的任何帮助。转述查询如下。
select
rank,
center,
supervisor_id,
missed,
box,
missed_percent
from
(select
supervisor_id,
missed,
box,
missed_percent,
@ranking := if(@warehouse = center, @ranking + 1,1) as rank,
@warehouse := center as center
from
(select
a.center,
f.supervisor_id,
sum(missed) as missed,
count(box) as box,
sum(missed) / count(box) as missed_percent,
(SELECT @ranking:= 0) s
from
seventy_subquery_table
left join people f on a.employee_id = f.employee_id
group by
a.center,
f.supervisor_id
) m
order by center, missed_percent desc
) m2
where m2.rank <= 5
order by center, rank
答案 0 :(得分:1)
我其实只想出来了!问题出在第二个包装子查询中 - 显然,与excel的ODBC连接执行逻辑上不同,然后在mysql中运行它。所以在这种情况下,某些东西在运行时可以工作,但是没有通过ODBC。
如果mysql显示正确的数据,excel不会添加(SELECT @warehouse:='')到第二个子查询修复问题!我希望其他人可以从中吸取教训,因为这令人沮丧