KNG*_*KNG 3 ms-access odbc iseries
我对下面的声明有疑问。查询的主要目的是将客户列表从 ODBC 提取到 Access 数据库中(我们的客户存储在 IBM i 上的 DB2 中)。该查询旨在查找超过 13 个月未交付 (RS2101F.DELDATE) 但尚未被抑制 (OM01U1.OM01068) 的客户 (OM01U1.OM01015)。我确实需要所有的列来研究设备和财务记录,所以我无法移除它们。不过,该声明是从几个表中提取的。我认为问题可能出在“Group By”上。当我收到结果时,我也得到了重复的出口 (OM01U1.OM01015)。我只需要看到最后一次交货日期 (RS2101F.DELDATE) 一次。请不要把我打得太糟,我没有创建这个查询,我只是继承了它。我知道这很遥远,而且可能有更好的方法来获取我需要的信息。我感谢任何帮助家伙!
SELECT
OM01U1.OM01041 as Loc,
OM01U1.OM01015 AS Outlet,
OM01U1.OM01945 AS OLTyp,
OM01U1.OM01052 AS Outlet_Name,
OM01U1.OM01054A AS Street_Number,
OM01U1.OM01054C AS Street_Name,
OM01U1.OM01055A AS City,
OM01U1.OM01055B AS State,
OM01U1.OM01106 AS Zip,
OM01U1.OM01058A AS Area_Code,
OM01U1.OM01058C AS Phone,
OM01U1.OM01037 AS Channel,
OM01U1.OM01926 AS USA_Type,
OM01U1.OM01078 AS Key_Acct,
OM01U1.OM01110 AS TRDGRP,
OM01U1.OM01034 AS Trade_Name,
OM01U1.OM01248 AS DTC,
OM01U1.OM01073 AS Sales_Route,
OM01U1.OM01068 AS Sup_CDE,
OM01U1.OM01982 AS Sup_Reason,
OM01U1.OM01067 AS Sup_Date,
OM01U1.OM01065 AS Creation_DT,
OM01U1.OM01066 AS Update_DT,
OM01U1.OM01141 AS CAN_NUM,
CF30_CNSTYP AS CF_CONTYP,
EC01_EQUNUM AS EC_EQUIP,
EC01_PRMSLR AS EC_SUPPLIER,
EC01_EQUOWN AS EC_OWN_CD,
EC01_EQUACY AS EC_ACCESSORY,
EC01_EQUSPP AS EC_COMPONENT,
EC01_SYSSTA AS EC_STATUS,
EC01_ISTDAT AS EC_INSTALL_DT,
EC01_RSPPRN AS EC_PERSON,
EC01_LASMTCDAT AS EC_LAST_MNT_DT,
OC02_RNTCTCNUM AS OC_CONT_NUM,
OC02_RNTCTCSTA AS OC_CONT_STATUS,
OC02_BTONUM AS OC_BILL_TO,
RS2101F.DELDATE AS RS_LAST_DEL_DT
FROM
CF30, EC01, OC02, OM01U1, RS2101F
WHERE
OM01U1.OM01015 = RS2101F.OUTNUM
GROUP BY
RS2101F.DELDATE,
OC02_BTONUM,
OC02_RNTCTCSTA,
OC02_RNTCTCNUM,
OC02_OUTNUM,
EC01_LASMTCDAT,
EC01_RSPPRN,
EC01_ISTDAT,
EC01_EQUOWN,
EC01_EQUACY,
EC01_EQUSPP,
EC01_SYSSTA,
EC01_PRMSLR,
EC01_EQUNUM,
CF30_CNSTYP,
OM01U1.OM01141,
OM01U1.OM01066,
OM01U1.OM01065,
OM01U1.OM01067,
OM01U1.OM01982,
OM01U1.OM01068,
OM01U1.OM01073,
OM01U1.OM01248,
OM01U1.OM01034,
OM01U1.OM01110,
OM01U1.OM01078,
OM01U1.OM01926,
OM01U1.OM01037,
OM01U1.OM01058C,
OM01U1.OM01058A,
OM01U1.OM01106,
OM01U1.OM01055B,
OM01U1.OM01055A,
OM01U1.OM01054C,
OM01U1.OM01054A,
OM01U1.OM01052,
OM01U1.OM01945,
OM01U1.OM01015,
OM01U1.OM01041
HAVING RS2101F.DELDATE < 1110809
AND OM01U1.OM01068<>'S'
Run Code Online (Sandbox Code Playgroud)
您有一个有效的查询,但您正在选择:
FROM CF30, EC01, OC02, OM01U1, RS2101F
Run Code Online (Sandbox Code Playgroud)
没有显式连接,只有一个隐式连接:
WHERE OM01U1.OM01015 = RS2101F.OUTNUM
Run Code Online (Sandbox Code Playgroud)
这将导致问题。您能找到每个表中的哪些字段(列)与哪些字段(列)匹配吗?然后你可以说:
FROM OM01U1
INNER JOIN RS2101F
ON OM01U1.OM01015 = RS2101F.OUTNUM
Run Code Online (Sandbox Code Playgroud)
例如。
您可能还会发现添加派生表很有用:
SELECT OUTNUM, Max(RS2101F.DELDATE) FROM RS2101F
Run Code Online (Sandbox Code Playgroud)
所以那将是:
FROM OM01U1
INNER JOIN (
SELECT OUTNUM, Max(RS2101F.DELDATE)
FROM RS2101F
GROUP BY OUTNUM) As t
ON OM01U1.OM01015 = t.OUTNUM
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1806 次 |
最近记录: |