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 列之一有问题。
您正在比较看起来像 INTEGER
s 的值与 AJITEM
、AJSTOR
、ILITEM
和 ILSTOR
中的值——但是什么类型这些列是什么,所有数据都严格符合该类型吗?
一种故障排除策略是尝试较小版本的查询,并逐渐添加元素,直到找到错误触发器。在这里,我会分别尝试 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)
我在 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 列之一有问题。
您正在比较看起来像 INTEGER
s 的值与 AJITEM
、AJSTOR
、ILITEM
和 ILSTOR
中的值——但是什么类型这些列是什么,所有数据都严格符合该类型吗?
一种故障排除策略是尝试较小版本的查询,并逐渐添加元素,直到找到错误触发器。在这里,我会分别尝试 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)