You could do multiple joins and check for null in your case statement.
(this is assuming you have multiple addresses in a separate table with a
primary key somehow relating to your main user database.  In my example
I am joining your pSeason file with the alias A to my theoretical
pAddresses file with alias B against B.seasonID.  Then I join it using a
left join 2 more times.  If a left join returns no record, it will
return NULL when checking for that field.)  Hope this helps and hope it
makes sense!

SELECT
    pseason.id
    ,pseason.addr_type
    ,pseason.person_addresses
    ,CASE
        WHEN A.addr_type IS NOT NULL THEN A.myAddressField
        WHEN A.addr_type IS NULL AND B.addr_type IS NOT NULL THEN
B.myAddressField
        WHEN A.addr_type IS NULL AND B.addr_type IS NULL THEN
C.myAddressField
    ELSE 'No Address Found'
    END AS SeasonAddress
FROM
    Pseason A LEFT JOIN Paddresses B ON A.id = B.seasonID
                AND B.addr_type = 'H'
        LEFT JOIN Paddresses C ON A.id = C.seasonID
                AND C.addr_type = 'AM'
        LEFT JOIN Paddresses D ON A.id = D.seasonID
                AND D.addr_type = 'ISIR'
WHERE
    pseason.id = '0000133'



Chris Peterson
Gainey IT
Adobe Certified Advanced Coldfusion Developer

-----------------------------------------------------------------------
From: Dawson, Michael
Sent: Thursday, June 28, 2007 2:56 PM
To: CF-Talk
Subject: SQL to Retrieve One Record from Several Possible Records

I am trying to select records based on a precedence.  I'm using SQL2005.
 
These records are address records for our students and employees.  Each
person will have, at least, one address, but many people will have more
than one address.
 
The addresses are coded so that we know the type of address:  H = Home,
LOC = Local, RMA = Room Assignment.
 
I want to pull only one record based on a precedence.  For example, if I
find an RMA record, then I want to pull that and no other records.  If
there is no RMA record, I need to find a LOC record, if one exists.
Repeat as needed until I find that last address type.
 
The precedence is:
1 - RMA
2 - LOC
3 - H
 
Here is the first step to find the address type in the order I need:
 
SELECT DISTINCT TOP 1
    pseason.id
    ,pseason.addr_type
    ,pseason.person_addresses
    ,CASE
        WHEN pseason.addr_type = 'H' THEN 1
        WHEN pseason.addr_type = 'AM' THEN 2
        WHEN pseason.addr_type = 'ISIR' THEN 3
    ELSE 999
    END AS sortOrder
FROM
    PSeason
WHERE
    pseason.id = '0000133'
ORDER BY
    sortOrder
 
Is there a better way to select these records?
 
Thanks
M!ke

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Upgrade to Adobe ColdFusion MX7
The most significant release in over 10 years. Upgrade & see new features.
http://www.adobe.com/products/coldfusion?sdid=RVJR

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:282494
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

Reply via email to