AS400 Query/Excel ODBC 联合错误

AS400 Query/Excel ODBC Union Error

我在 Excel 中为我们的 AS400/DB2 系统获取查询时遇到问题。

我正在尝试使用两个具有不同信息的不同表,但是 return 一个 aisle/slot 在同一列中基于特定的 SKU/Customer ID(Storer)。我认为 UNION 会起作用,但在尝试 运行 查询时我得到了 "SQL0802 - Data conversion or data mapping error"。

这是我现在拥有的:

SELECT ADJTRAN.AJAISL AS AISLE, ADJTRAN.AJSLOT AS SLOT
FROM S216F06V.WDLSDATA.ADJTRAN ADJTRAN
WHERE (AJITEM=8011989 AND AJSTOR=581)
UNION
SELECT ILCATER.ILAISL AS AISLE, ILCATER.ILSLOT AS SLOT
FROM S216F06V.WDLSDATA.ILCATER ILCATER
WHERE (ILITEM=8011989 AND ILSTOR=581)

如有任何帮助,我们将不胜感激。

编辑:AJAISL、AJSLOT、ILAISL 和 ILSLOT 是长度为 4 的字符字段。

猜测在所选列中找到的数据,CAST()CONVERT() 可能对您有所帮助。

试试像 —

SELECT CAST( ADJTRAN.AJAISL AS VARCHAR(128) ) AS AISLE, 
       CAST( ADJTRAN.AJSLOT AS VARCHAR(128) ) AS SLOT
...
UNION
SELECT CAST( ILCATER.ILAISL AS VARCHAR(128) ) AS AISLE, 
       CAST( ILCATER.ILSLOT AS VARCHAR(128) ) AS SLOT` 
...

编辑添加

考虑到所有 selected 列都是相同的数据类型,它可能是 tested 列之一有问题。

您正在比较看起来像 INTEGERs 的值与 AJITEMAJSTORILITEMILSTOR 中的值——但是什么类型这些列是什么,所有数据都严格符合该类型吗?

一种故障排除策略是尝试较小版本的查询,并逐渐添加元素,直到找到错误触发器。在这里,我会分别尝试 UNION 的每个部分,如果不是其中 WHERE ... AND 的一个元素,至少也是如此。

有时候Excel有bug...你能试试吗:

    select * from (
    SELECT ADJTRAN.AJAISL AS AISLE, ADJTRAN.AJSLOT AS SLOT
    FROM S216F06V.WDLSDATA.ADJTRAN ADJTRAN
    WHERE (AJITEM=8011989 AND AJSTOR=581)
    UNION
    SELECT ILCATER.ILAISL AS AISLE, ILCATER.ILSLOT AS SLOT
    FROM S216F06V.WDLSDATA.ILCATER ILCATER
    WHERE (ILITEM=8011989 AND ILSTOR=581)
    ) tmp

AJITEM 和 ILITEM 是 VARCHAR(20)。我正在将它与 INT 进行比较。已修复,下面的代码适用于零问题。我没有在原始问题中说明这一点并忽略了这么简单的错误。

SELECT ADJTRAN.AJAISL AS AISLE, ADJTRAN.AJSLOT AS SLOT
FROM S216F06V.WDLSDATA.ADJTRAN ADJTRAN
WHERE (AJITEM='8011989' AND AJSTOR=581)
UNION
SELECT ILCATER.ILAISL AS AISLE, ILCATER.ILSLOT AS SLOT
FROM S216F06V.WDLSDATA.ILCATER ILCATER
WHERE (ILITEM='8011989' AND ILSTOR=581)