내 테이블 F0005를 올바르게 필터링하는 데 문제가 있습니다. 나는이 쿼리를 여러 가지 방법으로 시도했다. 내가 성취하고자하는 것은 내가 가입하기 전에 F0005를 걸러내는 것입니다.LEFT JOIN 중첩 선택문
이것은 필터링 된 결과이며 그 결과는 해당 테이블에서만 완벽합니다.
SELECT LTRIM(F0005.DRKY), F0005.DRDL01, F0005.DRRT, F0005.DRSY
FROM
SENCOM.F0005 F0005
WHERE LTRIM(F0005.DRKY) != '' AND F0005.DRRT IN ('W1','08') AND F0005.DRSY NOT IN ('30','32','98')
여기 내 모든 쿼리와 합류하기 전에 테이블을 필터링하려는 시도가 있습니다. 나는이 때
SELECT
FSALES2011.SXAN8,
FSALES2011.SXCO AS Company,
FSALES2011.SXMCU AS BuisinessUnit,
FSALES2011.SXLITM AS ItemNumber,
FSALES2011.SXSLSM AS SalesPersonCode,
FSALES2011.SXDCTO AS OrderType,
FSALES2011.SXSLD1 AS SoldTo,
FSALES2011.SXADD1 AS Address,
FSALES2011.SXRP01 AS Division,
FSALES2011.SXRP02 AS Location,
FSALES2011.SXCI13+FSALES2011.SXCI14+FSALES2011.SXCI15+FSALES2011.SXCI16+FSALES2011.SXCI17+
FSALES2011.SXCI18+FSALES2011.SXCI19+FSALES2011.SXCI20+FSALES2011.SXCI21+FSALES2011.SXCI22+
FSALES2011.SXCI23+FSALES2011.SXCI24 AS PurchasePrice,
FSALES2011.SXAS13+FSALES2011.SXAS14+FSALES2011.SXAS15+FSALES2011.SXAS16+FSALES2011.SXAS17+
FSALES2011.SXAS18+FSALES2011.SXAS19+FSALES2011.SXAS20+FSALES2011.SXAS21+FSALES2011.SXAS22+
FSALES2011.SXAS23+FSALES2011.SXAS24 AS SalesPrice,
F4801.WAAN8,
F4801.WAWR01 AS WoType,
DIGITS(F4801.WADOCO) AS F4801ItemNumber,
F0101.ABAN8,
F0101.ABAC15 AS F0101CustomerType,
F0006.MCRP08 AS JobType,
SUBSTR(F0006.MCMCU,6,7) AS F0006BuisnessUnit,
LTRIM(F0005Filtered.DRKY) AS UDC,
F0005Filtered.DRDL01 AS Description,
F0005Filtered.DRRT,
F0005Filtered.DRSY
FROM
SENDTA.F0101 F0101
JOIN
JDEMOD.FSALES2011 FSALES2011
ON
FSALES2011.SXAN8 = F0101.ABAN8
LEFT OUTER JOIN
SENDTA.F0006 F0006
ON
FSALES2011.SXLITM = SUBSTR(F0006.MCMCU,6,7)
LEFT OUTER JOIN
SENDTA.F4801 F4801
ON
FSALES2011.SXLITM = DIGITS(F4801.WADOCO)
LEFT OUTER JOIN
(
SELECT
LTRIM(F0005.DRKY),
F0005.DRDL01,
F0005.DRRT,
F0005.DRSY
FROM
SENCOM.F0005 F0005
WHERE
LTRIM(F0005.DRKY) != ''
AND F0005.DRRT IN ('W1',
'08')
AND F0005.DRSY NOT IN ('30',
'32',
'98')) F0005Filtered
ON
ABAC15 = F0005Filtered.DRKY
나는 열 오류, SQL0205] 열 DRKY 테이블에 *의 N에 F0005FILTERED하지 얻을.
어떤 도움을 주셔서 감사합니다. 나는 이것에 익숙하지 않고 아이디어가 부족합니다 !! :)
큰 문제 덕분에 내 문제는 내 중첩 된 선택 항목의 형식이지만 완전히 다른 것입니다. 나는 잘못된 필드에 합류 했으므로 아무런 일치도 없었고 왜 NULLs를 얻었는지! 다시 한 번 감사드립니다 !!
여기가 최종 버전입니다. 이드는 몇몇 최적화 제안에 개방적이다. 그렇지 않으면 다행입니다!
SELECT
FSALES2011.SXAN8,
FSALES2011.SXCO AS Company,
FSALES2011.SXMCU AS BuisinessUnit,
FSALES2011.SXLITM AS ItemNumber,
FSALES2011.SXSLSM AS SalesPersonCode,
FSALES2011.SXDCTO AS OrderType,
FSALES2011.SXSLD1 AS SoldTo,
FSALES2011.SXADD1 AS Address,
FSALES2011.SXRP01 AS Division,
FSALES2011.SXRP02 AS Location,
FSALES2011.SXCI13+FSALES2011.SXCI14+FSALES2011.SXCI15+FSALES2011.SXCI16+FSALES2011.SXCI17+
FSALES2011.SXCI18+FSALES2011.SXCI19+FSALES2011.SXCI20+FSALES2011.SXCI21+FSALES2011.SXCI22+
FSALES2011.SXCI23+FSALES2011.SXCI24 AS PurchasePrice,
FSALES2011.SXAS13+FSALES2011.SXAS14+FSALES2011.SXAS15+FSALES2011.SXAS16+FSALES2011.SXAS17+
FSALES2011.SXAS18+FSALES2011.SXAS19+FSALES2011.SXAS20+FSALES2011.SXAS21+FSALES2011.SXAS22+
FSALES2011.SXAS23+FSALES2011.SXAS24 AS SalesPrice,
F4801.WAAN8,
F4801.WAWR01 AS WoType,
DIGITS(F4801.WADOCO) AS F4801ItemNumber,
F0101.ABAN8,
F0101.ABAC15 AS F0101CustomerType,
F0006.MCRP08 AS JobType,
SUBSTR(F0006.MCMCU,6,7) AS F0006BuisnessUnit,
LTRIM(UDC.DRKY) AS Code,
--UDC.DRDL01 AS JobDescription,
--UDC2.DRDL01 AS WODescription,
COALESCE(UDC.DRDL01,UDC2.DRDL01) AS WorkPerformed,
UDC3.DRDL01 AS CustomerDescription
FROM
SENDTA.F0101 F0101
JOIN
JDEMOD.FSALES2011 FSALES2011
ON
FSALES2011.SXAN8 = F0101.ABAN8
LEFT OUTER JOIN
SENDTA.F0006 F0006
ON
FSALES2011.SXLITM = SUBSTR(F0006.MCMCU,6,7)
LEFT OUTER JOIN
SENDTA.F4801 F4801
ON
FSALES2011.SXLITM = DIGITS(F4801.WADOCO)
LEFT OUTER JOIN
SENCOM.F0005 UDC
ON
F0006.MCRP08 = LTRIM(UDC.DRKY)
AND LTRIM(UDC.DRKY) != ''
AND UDC.DRRT IN ('W1',
'08')
AND UDC.DRSY NOT IN ('30',
'32',
'98')
LEFT OUTER JOIN
SENCOM.F0005 UDC2
ON
F4801.WAWR01 = LTRIM(UDC2.DRKY)
AND LTRIM(UDC2.DRKY) != ''
AND UDC2.DRRT IN ('W1',
'08')
AND UDC2.DRSY NOT IN ('30',
'32',
'98')
LEFT OUTER JOIN
SENCOM.F0005 UDC3
ON
F0101.ABAC15 = LTRIM(UDC3.DRKY)
AND LTRIM(UDC3.DRKY) != ''
AND UDC3.DRRT IN ('15')
고마워요! AS를 추가하면 실행이 가능해 지지만 이제는 원하는대로하지 않는 것이 내 문제입니다! F0005는 다른 테이블 중 하나의 코드에 대한 설명을 가지고 있습니다. 이 조인을 수행 할 때 모든 설명이 NULL입니다. – jcervantes
쿼리를 한 번에 한 조각 씩 진행하십시오. 작은 쿼리로 시작한 다음 조인을 추가하면 비 전형적인 동작이 어느 시점에서 발생하는지 확인할 수 있습니다. 그 조인은 당신이 조사 할 필요가있는 것입니다. 필드의 값이 예상하는 값입니까? 예를 들어 ABAC15를 LTRIM (DRKY)에 가입시킬 때 실제로 일치하는 항목이 있는지 확인 했습니까? LTRIM (ABAC15)도 필요합니까? – MatBailie
@jcervantes 설명이 NULL이라고 말하면 확실합니까? 귀하가 합류하는 기록에 대한 설명입니까? – Taryn