Joined: 26 Nov 2002 Posts: 12378 Topics: 75 Location: San Jose
Posted: Thu Aug 31, 2006 2:07 pm Post subject:
Change your sql to the following.
Code:
SELECT A.PLANT_CD
,CHAR(',')
,A.PART_NUM
,CHAR( ',')
,A.DTL_PART_NUM
,CHAR(',')
,CHAR(A.DTL_PART_EXT_QTY)
,CHAR(',')
,CHAR(VALUE(B.T_CD),' '))
FROM TABLE1 A LEFT OUTER JOIN TABLE2 B
ON A.PLANT_CD = B.PLANT_CD
AND A.DTL_PART_NUM = B.PART_NUM
AND A.CST_BOM_EXCL_IND <> 'Y'
AND B.DELETE_IND IN ('N', ' ')
AND B.EFFEC_THRU_DATE >= CURRENT DATE
AND B.EFFEC_FR_DATE <= CURRENT DATE
ORDER BY A.PLANT_CD
,A.PART_NUM
,A.DTL_PART_NUM
;
/* END OF INPUT
and read this topic entirely for the details as to what caused the extra bytes
Thanks a lot Kolusu! You have a brilliant answer as usual...
Code:
SELECT A.PLANT_CD
,CHAR(',')
,A.PART_NUM
,CHAR( ',')
,A.DTL_PART_NUM
,CHAR(',')
,CHAR(A.DTL_PART_EXT_QTY)
,CHAR(',')
,CHAR(VALUE(B.T_CD,' '))
FROM TABLE1 A LEFT OUTER JOIN TABLE2 B
ON A.PLANT_CD = B.PLANT_CD
AND A.DTL_PART_NUM = B.PART_NUM
AND A.CST_BOM_EXCL_IND <> 'Y'
AND B.DELETE_IND IN ('N', ' ')
AND B.EFFEC_THRU_DATE >= CURRENT DATE
AND B.EFFEC_FR_DATE <= CURRENT DATE
ORDER BY A.PLANT_CD
,A.PART_NUM
,A.DTL_PART_NUM
;
/* END OF INPUT
Thanks again,
Jaya. _________________ "Great spirits have always encountered violent opposition from mediocre minds."
-Albert Einstein
SELECT PLANT_CD,CHAR(','),PART_NUM,CHAR(','),
DTL_PART_NUM,CHAR(','),CHAR(DTL_PART_EXT_QTY)
FROM TABLE1
WHERE CST_BOM_EXCL_IND <> 'Y'
ORDER BY PLANT_CD, PART_NUM, DTL_PART_NUM ;
Query 2:
Code:
SELECT PART_NUM
, PLANT_CD
, T_CD
FROM TABLE2
WHERE DELETE_IND IN ('N', ' ')
AND
EFFEC_THRU_DATE >=
CURRENT DATE
AND
EFFEC_FR_DATE <=
CURRENT DATE;
I need all the rows in the result of QUERY- 1 . For every row i need to look up the result of QUERY-2 for matching rows with keys
Quote:
TABLE1.PLANT_CD = TABLE2.PLANT_CD AND
TABLE1.DTL_PART_NUM = TABLE2.PART_NUM
For that purpose i coded a left outer join
Code:
SELECT A.PLANT_CD
,CHAR(',')
,A.PART_NUM
,CHAR( ',')
,A.DTL_PART_NUM
,CHAR(',')
,CHAR(A.DTL_PART_EXT_QTY)
,CHAR(',')
,CHAR(VALUE(B.T_CD),' '))
FROM TABLE1 A LEFT OUTER JOIN TABLE2 B
ON A.PLANT_CD = B.PLANT_CD
AND A.DTL_PART_NUM = B.PART_NUM
AND A.CST_BOM_EXCL_IND <> 'Y'
AND B.DELETE_IND IN ('N', ' ')
AND B.EFFEC_THRU_DATE >= CURRENT DATE
AND B.EFFEC_FR_DATE <= CURRENT DATE
ORDER BY A.PLANT_CD
,A.PART_NUM
,A.DTL_PART_NUM
;
This left outer join query results in no of rows greater than the QUERY1 resultant rows. I am missing something here..
Please advise.
Thanks,
Jaya. _________________ "Great spirits have always encountered violent opposition from mediocre minds."
-Albert Einstein
TABLE1 and QUERY1 has duplicates on PLANT_CD and DTL_PART_NUM.
TABLE2 also has duplicates on PART_NUM and PLANT_CD .But the QUERY2
Code:
SELECT PART_NUM
, PLANT_CD
, T_CD
FROM TABLE2
WHERE DELETE_IND IN ('N', ' ')
AND
EFFEC_THRU_DATE >=
CURRENT DATE
AND
EFFEC_FR_DATE <=
CURRENT DATE;
has no duplicates on PART_NUM and PLANT_CD.
I need all the rows in QUERY1 with matching T_CD value from QUERY2.
My current work around is
Code:
SELECT A.PLANT_CD,CHAR(','),A.PART_NUM,CHAR( ','),
A.DTL_PART_NUM,CHAR(','),CHAR(A.DTL_PART_EXT_QTY),
CHAR(','),CHAR(VALUE(B.MAKE_BUY_CD,' '))
FROM
(SELECT PLANT_CD,PART_NUM,
DTL_PART_NUM,DTL_PART_EXT_QTY
FROM TABLE1
WHERE CST_BOM_EXCL_IND <> 'Y') A
LEFT OUTER JOIN
(SELECT PART_NUM, PLANT_CD, T_CD
FROM TABLE2
WHERE DELETE_IND IN ('N', ' ')
AND
EFFEC_THRU_DATE >=
CURRENT DATE
AND
EFFEC_FR_DATE <=
CURRENT DATE) B
ON A.DTL_PART_NUM = B.PART_NUM
AND A.PLANT_CD = B.PLANT_CD
ORDER BY PLANT_CD, PART_NUM, DTL_PART_NUM ;
Please advise if this would have any flaws or any better query.
Thanks,
Jaya, _________________ "Great spirits have always encountered violent opposition from mediocre minds."
-Albert Einstein
Look at this link and it exactly matches your scenario mentioned above - However, I'm still not able to conclude why it didn't work just by coding a LEFT OUTER JOIN (since you didn't have a WHERE clause out there)
________
grape ape
Last edited by coolman on Sat Feb 05, 2011 1:53 am; edited 1 time in total
Thanks for the link coolman!...I had also reffered the same for my current workaround. 8) .
With my recent query i am getting the same rows as my earlier QUERY1.
Thanks,
Jaya. _________________ "Great spirits have always encountered violent opposition from mediocre minds."
-Albert Einstein
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum