【发布时间】:2018-08-17 04:46:24
【问题描述】:
首先我对 SQL 不是很精通。
我正在尝试根据子查询的记录过滤结果:
SELECT DISTCINT
t.end_zone, l2.LS_TRIP_NUMBER, l2.LS_DRIVER,
l2.LS_POWER_UNIT, l2.LS_ACTUAL_DATE
FROM
LYNX.LEGSUM l
LEFT OUTER JOIN
LYNX.TLORDER t ON l.LS_DLID = t.DETAIL_LINE_ID
INNER JOIN
LYNX.LEGSUM l2 ON l2.LS_FROM_ZONE = t.END_ZONE
AND l2.LS_DRIVER = l.LS_DRIVER
AND l2.LS_POWER_UNIT = l.LS_POWER_UNIT
WHERE
t.ORIGIN = 'PRO8060'
AND l.LS_ACTUAL_DATE >= '2017-01-01 00:00:00'
AND l.LS_ACTUAL_DATE < '2018-01-01 00:00:00'
AND NOT (t.CURRENT_STATUS = 'CANCEL'
OR t.CURRENT_STATUS = 'CANCL'
OR t.CURRENT_STATUS = 'ENTRY')
现在,我要做的是根据以下内容从我的 Legsum (LS) 表中过滤:
-LS.Origin = t.endzone
-LS.Power_unit = l2.power_unit
-LS.Driver = l2.Driver
-LS.actual_date Between l.actual_date and DAY(l.actual_date)+1
当我尝试在子查询的结果中获取所有这些条件时,我遇到了困难,这是我尝试过的:
SELECT
LEGSUM.LS_TRIP_NUMBER, LEGSUM.LS_LEG_DIST, LS_MT_LOADED
FROM
LYNX.LEGSUM LEGSUM
LEFT OUTER JOIN
LYNX.TLORDER TLORDER ON LEGSUM.LS_DLID = TLORDER.DETAIL_LINE_ID
WHERE
LEGSUM.LS_ACTUAL_DATE >= '2017-01-01 00:00:00'
AND LEGSUM.LS_ACTUAL_DATE < '2018-01-01 00:00:00'
AND NOT (TLORDER.BILL_NUMBER LIKE 'A%'
OR TLORDER.BILL_NUMBER LIKE 'C%'
OR TLORDER.BILL_NUMBER LIKE 'L%'
OR TLORDER.BILL_NUMBER LIKE 'Q%'
OR TLORDER.BILL_NUMBER LIKE 'MA%')
AND NOT (TLORDER.CURRENT_STATUS = 'CANCEL'
OR TLORDER.CURRENT_STATUS = 'CANCL'
OR TLORDER.CURRENT_STATUS = 'ENTRY')
AND LEGSUM.LS_FROM_ZONE IN (SELECT DISTINCT t.end_zone, l2.LS_TRIP_NUMBER, l2.LS_DRIVER, l2.LS_POWER_UNIT
FROM LYNX.LEGSUM l
LEFT OUTER JOIN LYNX.TLORDER t ON l.LS_DLID = t.DETAIL_LINE_ID
INNER JOIN LYNX.LEGSUM l2 ON l2.LS_FROM_ZONE = t.END_ZONE
AND l2.LS_DRIVER = l.LS_DRIVER
AND l2.LS_POWER_UNIT = l.LS_POWER_UNIT
WHERE t.ORIGIN = 'PRO8060'
AND l.LS_ACTUAL_DATE >= '2017-01-01 00:00:00'
AND l.LS_ACTUAL_DATE < '2018-01-01 00:00:00'
AND NOT (t.CURRENT_STATUS = 'CANCEL'
OR t.CURRENT_STATUS = 'CANCL'
OR t.CURRENT_STATUS = 'ENTRY')
)
这是获得第一个条件,而不是其他 3 个
感谢您的任何帮助
【问题讨论】: