0

MSSQL でクエリをプルして、cus_address テーブルから 9 桁の郵便番号が存在する場合にプルしようとしています。私は自分で作成した dbo.WEST_PALM_ZIPS というテーブルから 5 桁の郵便番号を既に取得しています。WEST_PALM_ZIPS テーブルと CUS_ADDRESS.POSTAL_CODE のすべての zip をプルする必要があります (どんな助けも大歓迎です)

SELECT DISTINCT [Member Id] = Cust.MASTER_CUSTOMER_ID,[FirstName] = Cust.First_Name    

[Lastname] = Cust.Last_Name,

[Email] = Cust.PRIMARY_EMAIL_ADDRESS,

[Zip Code] = addr.POSTAL_CODE

FROM ORDER_DETAIL OD
INNER JOIN CUSTOMER  Cust 
    ON  Cust.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and Cust.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and od.subsystem = 'MBR'

INNER JOIN CUS_ADDRESS  Addr    
    ON Addr.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID  
    and Addr.POSTAL_CODE in ( select POSTAL_CODE from [dbo].[WEST_PALM_ZIPS])
    and Addr.COUNTRY_descr = 'United States'
    and  If(Len([Postal_Code])>5,Left([Postal_Code],5) & "-" &
Mid([Postal_Code],6),[Postal_Code])][0-9]


INNER JOIN CUS_ADDRESS_DETAIL  AddrD 
    ON AddrD.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and AddrD.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and AddrD.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID 
    and AddrD.ADDRESS_TYPE_CODE = OD.SHIP_ADDRESS_TYPE_CODE     
4

1 に答える 1

2

これがあなたの求めているものだと思います - ただし、私が何か誤解していたり​​、期待どおりに機能しない場合は、大声で言ってください。

SELECT DISTINCT [Member Id] = Cust.MASTER_CUSTOMER_ID
,[FirstName] = Cust.First_Name    
,[Lastname] = Cust.Last_Name
,[Email] = Cust.PRIMARY_EMAIL_ADDRESS
,[Zip Code] = addr.POSTAL_CODE
FROM ORDER_DETAIL OD

INNER JOIN CUSTOMER  Cust 
    ON  Cust.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and Cust.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and od.subsystem = 'MBR'

INNER JOIN CUS_ADDRESS  Addr    
    ON Addr.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID  
    and Addr.COUNTRY_descr = 'United States'
    --check for 5 digit or 9 digit zip codes
    and 
    (
        --check for 5 digit zip codes based on contents of table
        (
            LEN(Addr.POSTAL_CODE) = 5
            and Addr.POSTAL_CODE in 
            ( 
                select POSTAL_CODE 
                from [dbo].[WEST_PALM_ZIPS] wpz
                --if you want to be sure you only get the 5 digit codes from this table (though from your description I believe that's all this table contains?)
                --where LEN(POSTAL_CODE) = 5
                --and Addr.POSTAL_CODE like '[0-9][0-9][0-9][0-9][0-9]'
            )
        )
        or -- check that it's a 9 digit code
        (
            LEN(Addr.POSTAL_CODE) = 10
            and SUBSTRING(Addr.POSTAL_CODE,6,1) = '-'   
            and Addr.POSTAL_CODE like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'
        )
    )
INNER JOIN CUS_ADDRESS_DETAIL  AddrD 
    ON AddrD.MASTER_CUSTOMER_ID = OD.SHIP_MASTER_CUSTOMER_ID 
    and AddrD.SUB_CUSTOMER_ID = OD.SHIP_SUB_CUSTOMER_ID 
    and AddrD.CUS_ADDRESS_ID = OD.SHIP_ADDRESS_ID 
    and AddrD.ADDRESS_TYPE_CODE = OD.SHIP_ADDRESS_TYPE_CODE   

上記の例で使用されている like ステートメント/パターン マッチングの説明については、http://msdn.microsoft.com/en-us/library/ms187489 (SQL.90).aspx を参照してください。

于 2013-10-18T21:04:33.317 に答える