Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2000 Forums
 Transact-SQL (2000)
 SQL Server Joins

Author  Topic 

AskSQLTeam
Ask SQLTeam Question

0 Posts

Posted - 2006-09-19 : 07:40:41
Aparna writes "Hi,

In the following query I would like to replace the "*=' operators for the left Joins with the Key Words " Left Outer Join". How do i do it? What is the syntax



SELECT
T5.rounded_month AS PeriodsDIM,
CASE WHEN T2.SDDCTO = 'SK' and T2.SDROUT = 'OPK' THEN T2.SDLNTY + ' (NSSF)' ELSE T2.SDLNTY + ' (NS' + T2.SDDCTO + ')' END AS ScenarioDIM,
CASE WHEN T2.SDDCTO = 'SK' and T2.SDROUT = 'CPK' THEN 'PP' ELSE 'SAP' END AS ViewDIM,
'CO013' AS CompanyDIM,
T1.IMLITM AS ProductDIM,
CASE WHEN T3.ABAC02 in ('', 'NA') THEN 'CT_NA' ELSE 'CT_' + T3.ABAC02 END AS CustomerTypeDIM,
'B' + CONVERT(VARCHAR, T2.SDAN8) + ' SUR' AS MarketDIM,
CASE WHEN T1.IMSRP5 in ('', 'NA') THEN 'PRDFAM_NA' ELSE T1.IMSRP5 END AS ProdFamDIM,

CASE WHEN T2.SDLITM in ('99910') THEN SUM(T2.SDAEXP)
ELSE
CASE WHEN T2.SDDCTO in ('SK') AND T2.SDROUT in ('CPK','OPK') THEN SUM(T2.SDUPRC * T2.SDSOQS)
ELSE
SUM(T2.SDAEXP)
END
END AS ExtSales,
CASE WHEN T2.SDDCTO in ('SK') and T2.SDLNTY in ('N') or SDLITM in ('LOSP') THEN 0
ELSE
CASE WHEN T2.SDUOM not in ('EA') THEN SUM(T2.SDSOQS * T4.UMCONV)
ELSE
SUM(T2.SDSOQS)
END
END AS ExtUnits,

CASE WHEN T2.SDDCTO in ('SK') AND T2.SDROUT in ('CPK','OPK') THEN SUM(T2.SDUNCS * T2.SDSOQS) ELSE SUM(T2.SDECST) END AS ExtCost,
t2.sddoco,
t2.sddcto,
t2.sdlnty,
T2.SDGLC
FROM



JDEF4101 T1, -- Item Master
JDEF42119 T2, -- Sales Order History
JDEF0101 T3, -- Address Book Master
JDEF41002 T4, -- Unit of Measure Conversion
vjdeDimensionTimegr T5, -- Time converter
DimensionScenarioDocType T6 -- Doc/Line type listing
WHERE
T1.IMITM *= T4.UMITM -- THIS ONE
and T2.SDUOM *= T4.UMUM
and T2.SDITM = T1.IMITM
and T2.SDAN8 = T3.ABAN8
and T2.SDIVD = T5.Date_Key
and T2.SDDCTO = T6.SDDCTO
and T2.SDLNTY = T6.SDLNTY
and T4.UMRUM in ('EA')
and T1.IMSRP5 not in ('CPP','OPP') -- added for GMC
and T1.IMLITM not in ('99MMLASER1') -- SK message line not required
-- and T5.fiscal_year in ('6') -- Indicates year (eg. 5 = 2005, 4 = 2004)
-- and T1.IMSRP1 in ('F', 'I', 'S', 'G','D') -- Surgical Sales
/*********************************************************************************************/
-- and T1.IMSRP1 in ('F','I', 'S', 'G','D','E','C','J','K') -- FOR TESTING
-- and T1.IMSRP2 in ('FP') -- FOR TESTING
and T2.SDIVD >= '2006-09-01' -- FOR TESTING
and T2.SDIVD <= '2006-09-01' -- FOR TESTING
-- and T2.sddoco in ('23172')--,'21155','22090','21660')-- FOR TESTING
-- and T1.IMLITM in ('LOSP') -- FOR TESTING
-- and T2.SDAN8 in ('11895') -- FOR TESTING
-- and T2.sddcto not in ('SK') -- FOR TESTING
-- and T5.rounded_month in ('6') -- FOR TESTING
-- and T2.sddcto in ('CI','CN','CV','SG','SI','SO','SP','SV','SZ') -- FOR TESTING


GROUP BY
T5.rounded_month,
T2.SDLNTY,
T2.SDROUT,
T2.SDDCTO,
T1.IMLITM,
T3.ABAC02,
'B' + CONVERT(VARCHAR,T2.SDAN8) + ' SUR',
T1.IMSRP5,
T2.SDUOM,
T2.SDLITM,
T2.SDGLC,
--T2.SDLNTY + ' (NS' + T2.SDDCTO + ')',
t2.sddoco





Thanks and Regards

aparna"

harsh_athalye
Master Smack Fu Yak Hacker

5581 Posts

Posted - 2006-09-19 : 08:03:44
You can remember this simple logic:

IF * mark is on the left hand side of = operator, use LEFT OUTER JOIN keyword
IF * mark is on the right hand side of = operator, use RIGHT OUTER JOIN keyword

For. e.g.

Select e.*
from Emp e Left Outer Join Dept d
on e.DeptNo = d.DeptNo

This query will fetch all emp records irrespective of whether they belong to any dept or not

Check BOL for more information on OUTER JOINs !

Harsh Athalye
India.
"Nothing is Impossible"
Go to Top of Page

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2006-09-19 : 08:15:25
Since you have no aggregation, I think replacing all the GROUP BY with DISTINCT will be faster.
SELECT DISTINCT	T5.rounded_month AS PeriodsDIM,
CASE
WHEN T2.SDDCTO = 'SK' and T2.SDROUT = 'OPK' THEN T2.SDLNTY + ' (NSSF)'
ELSE T2.SDLNTY + ' (NS' + T2.SDDCTO + ')'
END AS ScenarioDIM,
CASE
WHEN T2.SDDCTO = 'SK' and T2.SDROUT = 'CPK' THEN 'PP'
ELSE 'SAP'
END AS ViewDIM,
'CO013' AS CompanyDIM,
T1.IMLITM AS ProductDIM,
CASE
WHEN T3.ABAC02 in ('', 'NA') THEN 'CT_NA'
ELSE 'CT_' + T3.ABAC02
END AS CustomerTypeDIM,
'B' + CONVERT(VARCHAR, T2.SDAN8) + ' SUR' AS MarketDIM,
CASE
WHEN T1.IMSRP5 in ('', 'NA') THEN 'PRDFAM_NA'
ELSE T1.IMSRP5
END AS ProdFamDIM,
CASE
WHEN T2.SDLITM in ('99910') THEN SUM(T2.SDAEXP)
WHEN T2.SDDCTO in ('SK') AND T2.SDROUT in ('CPK','OPK') THEN SUM(T2.SDUPRC * T2.SDSOQS)
ELSE SUM(T2.SDAEXP)
END AS ExtSales,
CASE
WHEN T2.SDDCTO in ('SK') and T2.SDLNTY in ('N') or SDLITM in ('LOSP') THEN 0
WHEN T2.SDUOM not in ('EA') THEN SUM(T2.SDSOQS * T4.UMCONV)
ELSE SUM(T2.SDSOQS)
END AS ExtUnits,
CASE
WHEN T2.SDDCTO in ('SK') AND T2.SDROUT in ('CPK','OPK') THEN SUM(T2.SDUNCS * T2.SDSOQS)
ELSE SUM(T2.SDECST)
END AS ExtCost,
t2.sddoco,
t2.sddcto,
t2.sdlnty,
T2.SDGLC
FROM JDEF4101 T1,
INNER JOIN JDEF42119 T2 ON T2.SDITM = T1.IMITM and T2.SDIVD >= '2006-09-01' AND T2.SDIVD <= '2006-09-01'
INNER JOIN JDEF0101 T3 ON T2.SDAN8 = T3.ABAN8
INNER JOIN vjdeDimensionTimegr T5 ON T2.SDIVD = T5.Date_Key
INNER JOIN DimensionScenarioDocType T6 ON T2.SDDCTO = T6.SDDCTO AND T2.SDLNTY = T6.SDLNTY
LEFT JOIN JDEF41002 T4 ON T1.IMITM = T4.UMITM AND T2.SDUOM = T4.UMUM and T4.UMRUM in ('EA')
WHERE T1.IMSRP5 not in ('CPP','OPP')
and T1.IMLITM not in ('99MMLASER1')


Peter Larsson
Helsingborg, Sweden
Go to Top of Page
   

- Advertisement -