【发布时间】:2017-11-20 23:27:56
【问题描述】:
我正在编写使用 VBA 访问“绿屏”AS400 IBM iSERIES 的 SQL 代码,并且我正在通过 ADODB 连接进行连接(如果您需要有关连接或 SQL 版本的更多信息,请告诉我,我是SQL 初学者)。
现在我的代码运行得很好,但是我想在最后一个 LEFT JOIN 中添加另一个“AND”条件,这样代码只考虑存在于 [ (PO.STKDT- PO.ACTDT)
所以我想添加类似的内容:
AND ( date(timestamp((PO.STKDT + 19000000) concat '000000')) - date(timestamp((PO.ACTDT + 19000000) concat '000000')) ) <40
代码在没有这个条件的情况下运行良好,但是当我添加这个条件时,它给我一个错误“SQL0181:日期、时间或时间戳字符串中的值无效”。
任何帮助都可以解决 AND 条件错误
请注意,我将“TIMESTAMP”和“DATE”附加到 STKDT 和 ACTDT 日期列,以便将其从格式 1171119 转换为 2017 年 11 月 19 日。而且我有一个参数可以正确地使用这种格式提取列数据。
感谢您的帮助!
这是我的完整代码:
SELECT X.ITNBR AS ITEM, X.ITDSC AS DESCRIPTION,
X.CRUS AS CREATE_USER, X.INVFG AS INV_FLAG ,
C1.PURPR AS PO_PRICE, C2.STDUC AS STD_COST,
A.HOUSE AS WHS, A.WHSLC AS WHSLOCATION ,
A.VNDNR AS VENDR,VN.VNAME AS VENDOR_NAME ,
VN.VNAMA, A.MOHTQ AS QTY_ON_HAND,
A.MPUPQ AS QTY_ON_PURCHASE ,A.MALQT AS QTY_ALLOCATED,
(A.MOHTQ+A.MPUPQ-A.MALQT) AS QTY_AVAILABLE,
( (A.MOHTQ+A.MPUPQ-A.MALQT) * C2.STDUC ) AS INV_COST,
K.KIORDCNT AS KB_CARDS, K.KICQTY AS KB_QTY,
K.KICTYP AS KB_TYPE, COUNT( PO.ITNBR ) AS DATA_COUNT ,
AVG(PO.STKPR) AS AVG_PO_PRICE,
CAST(AVG( date(timestamp((PO.STKDT + 19000000) concat '000000')) - date(timestamp((PO.ACTDT + 19000000) concat '000000')) ) AS DECIMAL(50,2) ) AS AVG_LEADTIME,
SUM(PO.QTYOR) AS ALL_QTY_ORDERED,MIN(PO.QTYOR) AS MIN_QTY_ORDERED,
CAST(AVG(PO.QTYOR) AS DECIMAL(50,2) ) AS AVG_QTY_ORDERED,
MAX(PO.QTYOR) AS MAX_QTY_ORDERED
FROM SIM.ENT X
LEFT JOIN SIM.ITEM A ON (A.ITNBR=X.ITNBR)
LEFT JOIN SIM.ITMR C1 ON (C1.ITNBR=A.ITNBR)
LEFT JOIN SIM.ITMV C2 ON (C2.ITNBR=A.ITNBR)
LEFT JOIN SIM.VENN VN ON (VN.VNDNR=A.VNDNR)
LEFT JOIN SIM.KBIM K ON (K.KIITEM=A.ITNBR AND K.KIHOUSE=A.HOUSE)
LEFT JOIN SIM.POIT PO ON (PO.ITNBR=A.ITNBR AND PO.HOUSE=A.HOUSE AND PO.VNDNR=A.VNDNR)
AND PO.STAIC !=99
AND PO.ACTDT between '" & Range("AA1") & "' and '" & Range("AB1") & "' ***AND MYTIMECONDITIONHERE***
WHERE X.ITNBR != 'TEST%'
GROUP BY X.ITNBR, X.ITDSC,X.CRUS,X.INVFG, C1.PURPR, C2.STDUC
,A.HOUSE, A.VNDNR,VN.VNAME, VN.VNAMA, A.WHSLC
,A.MOHTQ,A.MPUPQ,A.MALQT,K.KIORDCNT, K.KICQTY, K.KICTYP`
【问题讨论】:
-
您不能使用 SQL 访问绿屏,对吧?您使用它来查询数据库。对于 IBM i,该数据库很可能是 DB2 for i。
标签: join conditional-statements ibm-midrange datetime-format db2-400