MS Access sql将5个表与列中的奇怪字符分组

Posted

技术标签:

【中文标题】MS Access sql将5个表与列中的奇怪字符分组【英文标题】:MS Access sql join 5 table with group by strange chars in columns 【发布时间】:2017-07-18 11:57:38 【问题描述】:

我有一个奇怪的问题:我正在尝试使用 group by 获取一些统计信息

这连接了 5 个表,4 个表连接到一个 (T_Registo) 基本上是为了获取 T_Registo 表上值的描述

我相信连接表没问题,但问题是当我添加 GROUP BY 部分时。

结果是除了一列之外的所有列中都有这个奇怪的字符:

table result

我使用不同的技术完成了查询,例如:

SELECT DateDiff("n",DataHora_inicio,DataHora_fim) AS tempo_registo, 
T_Registo.Utilizador AS Utilizador,
T_Origem_Contacto.Nome_contacto, 
T_Origem_Problema.Nome_problema,
T_Problema_PED.Nome_Problema_PED,
T_Indicador_resolucao.Resolucao_desc
FROM (((T_Registo  INNER JOIN T_Problema_PED ON T_Registo.Problema_PED_ID = 
  T_Problema_PED.Problema_PED_ID)
INNER JOIN T_Indicador_resolucao ON T_Registo.Indicador_resolvido = 
  T_Indicador_resolucao.Indicador_resolvido)
INNER JOIN T_Origem_Problema ON T_Registo.Origem_problema_ID = 
  T_Origem_Problema.Origem_problema_ID)
INNER JOIN T_Origem_Contacto ON T_Registo.Origem_contacto_ID = 
  T_Origem_Contacto.Origem_contacto_ID
GROUP BY DateDiff("n",DataHora_inicio,DataHora_fim), Utilizador, 
  Nome_contacto, Nome_problema,

Nome_Problema_PED, Resolucao_desc;

也试过了....

SELECT DateDiff("n",DataHora_inicio,DataHora_fim) AS tempo_registo, 
T_Registo.Utilizador AS Utilizador,
T_Origem_Contacto.Nome_contacto, 
T_Origem_Problema.Nome_problema, 
T_Problema_PED.Nome_Problema_PED,
T_Indicador_resolucao.Resolucao_desc

from 
 T_Registo,T_Problema_PED,T_Indicador_resolucao
,T_Origem_Problema,T_Origem_Contacto

where T_Registo.Problema_PED_ID = T_Problema_PED.Problema_PED_ID and 
T_Registo.Indicador_resolvido = T_Indicador_resolucao.Indicador_resolvido

and T_Registo.Origem_problema_ID = T_Origem_Problema.Origem_problema_ID and 
T_Registo.Origem_contacto_ID = T_Origem_Contacto.Origem_contacto_ID

GROUP BY DateDiff("n",DataHora_inicio,DataHora_fim), Utilizador, 
Nome_contacto, Nome_problema,

Nome_Problema_PED, Resolucao_desc

但结果是一样的。

我已经改变了连接的顺序和添加,减去列但结果仍然不好,甚至认为它似乎有一些影响,例如

在上面的示例列中,Nome_contacto 似乎是正确的,但如果订单发生变化,则 Nome_contacto 列是错误的并且 Utilizador 是好的……。

只是为它添加一些奇怪的元素:-)

你能帮忙吗?这很奇怪,我已经尝试了我能记住的一切,甚至迁移到显然可以正常工作的 SQL Server

【问题讨论】:

您介意格式化您的问题,以便于阅读吗? 【参考方案1】:

1) 如果不使用任何聚合函数,为什么还要使用GROUP BY

2) 您的描述栏很可能是备注/长文本。

https://bytes.com/topic/access/answers/849295-access-getting-chinese-character-unexpectedly-why

原因包括: a)您在查询中按备注字段分组,该查询具有未索引的连接 字段:http://allenbrowne.com/bug-18.html

解决方法

以下任一方法都可以解决该错误:

不要按备注字段分组。而是在备注字段下的总计行中选择第一个。这不仅避免了错误,而且执行效率更高,而且还允许 JET 返回整个备注字段,而不是将其截断为 255 个字符。 索引 JOIN 中涉及的字段。 或者,像您所做的那样,将数据类型更改为(短)文本。 :)

【讨论】:

谢谢安德烈。由于某种原因,当从 sql server 导出数据库时,某些字段的数据类型为 memo.我只需要将其更改为文本....它就可以了 如果答案解决了您的问题,您可以accept it,这也将问题标记为已解决。 @LuisFerreira 将字段更改为短文本......就像一个魅力。非常感谢

以上是关于MS Access sql将5个表与列中的奇怪字符分组的主要内容,如果未能解决你的问题,请参考以下文章

MS Access SQL 查询 - 将所有表与多个表联合 - 重复字段

MS Access JOIN 访问表与 SQL Server 表

在 MS Access 或 SQL Server 中查找 2 个表之间的差异

如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?

MS Access 2007 中的 SQL 内部连接

SQL:将行与列中的逗号分隔值合并