| 
	
 | 
 Posted by Damien on 03/23/06 15:28 
cheesey_toastie wrote: 
> Hi, 
> 
> I trying to write a select statement that will return each of my sales 
> men a region code based on a table of post codes using wildcards... eg. 
>  MK1 1AA would be matched in the region code table to MK1% 
> 
> SELECT     dn.DEALER_CODE, dn.NAME AS DNAME, rc.REGION_ID, 
> rc.POST_CODE, dn.POSTAL_CODE 
> FROM         REGIONAL_CODES rc CROSS JOIN 
>                       DEALER_NAW dn 
> WHERE     (dn.POSTAL_CODE LIKE rc.POST_CODE) 
> 
> The above statement works BUT there are some post code areas such as 
> our friends in Milton Keynes that are split into two regions...  eg MK1 
> is region id 2 and MK10 is region 3. 
> 
> So a dealer with post code MK10 1AA would be matched to both rows 
> returning duplicates 
> POST_CODE      REGION_ID 
> MK1%                2 
> MK10%              3 
> 
> I think the answer would lie in a subquery which returns the ID of the 
> region with the longest length of the postcode match (e.g. 
> len(POST_CODE) for the rc table...  return only the MAX.... 
> 
> any ideas???? 
> 
> Any help muchos appreciated, and I apologies now for the naming of the 
> dealers name as a reserve word... not me! 
> 
> Ct 
 
Hi Ct, 
 
I think it would be along the lines of: 
 
SELECT     dn.DEALER_CODE, dn.NAME AS DNAME, rc.REGION_ID, 
rc.POST_CODE, dn.POSTAL_CODE 
FROM         REGIONAL_CODES rc CROSS JOIN 
                       DEALER_NAW dn 
WHERE     (dn.POSTAL_CODE LIKE rc.POST_CODE) and not exists (select * 
from REGIONAL_CODES rc2 where dn.POSTAL_CODE LIKE rc2.POST_CODE and 
LEN(rc2.POSTAL_CODE) > LEN(rc.POSTAL_CODE)) 
 
Damien
 
  
Navigation:
[Reply to this message] 
 |