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.
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.SDGLCFROM 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 listingWHERE 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 TESTINGGROUP 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.sddocoThanks and Regardsaparna" |
|
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 keywordIF * mark is on the right hand side of = operator, use RIGHT OUTER JOIN keywordFor. e.g.Select e.* from Emp e Left Outer Join Dept don e.DeptNo = d.DeptNoThis query will fetch all emp records irrespective of whether they belong to any dept or notCheck BOL for more information on OUTER JOINs !Harsh AthalyeIndia."Nothing is Impossible" |
 |
|
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.SDGLCFROM 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.ABAN8INNER JOIN vjdeDimensionTimegr T5 ON T2.SDIVD = T5.Date_KeyINNER JOIN DimensionScenarioDocType T6 ON T2.SDDCTO = T6.SDDCTO AND T2.SDLNTY = T6.SDLNTYLEFT 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 LarssonHelsingborg, Sweden |
 |
|
|
|
|
|
|