有关条件的SQL查询帮助

时间:2015-02-05 23:07:38

标签: sql case

我有一个表格A,其中包含以下列:

Addr_id   Street_Add      Addr_type_cd        Acct_nbr         CITY                     
   1        12 ST             PROP               A              MN
   1        12 ST             MAIL               A1             MN
   1        12 ST             PROP               B              MN
   1        12 ST             PROP               A              MN
   1        12 ST             PROP               A              MN
   2        13 ST             PROP               A2             MI
   2        13 ST             MAIL               A3             MI
   3        14 ST             PROP               AB             MO
   4        15 ST             MAIL               AD             IL  

输出如下;

OUTPUT - ADDR_ID            OUTPUT - ADDR_TYPE_ CD          
    1      PROP         
    1      MAIL         
    1      RPT          
    2      PROP         
    2      MAIL         
    2      RPT          
    3      PROP         
    3      RPT          
    4      MAIL         
    4      RPT          

自然键是Street_addr和CITY。我正在尝试编写一个Case表达式,根据以下规则填充表B中的另一列ADDR_TYPE_CD

  
      
  • WHERE STREET_ADD = STREET_ADD和CITY = CITY
  •   
  • IF ADDR_TYPE_cd = PROP和MAIL,
  •   
  • 那么表B中的ADDR_TYPE_CD = PROP,MAIL,RPT
  •   
  • IF ADDR_TYPE_cd = PROP
  •   
  • 那么表B中的ADDR_TYPE_CD = PROP,RPT
  •   
  • IF ADDR_TYPE_cd = MAIL
  •   
  • 那么表B中的ADDR_TYPE_CD = MAIL,RPT
  •   

我尝试通过CASE语句写作:

SELECT
     CASE addr_type_cd
     WHEN addr_type_cd='PROP' AND addr_type_cd='MAIL'                               
     THEN addr_type_cd='RPT' AND addr_type_cd='PROP' AND addr_type_cd='MAIL'    
     END                        
FROM Table A                        
WHERE street_addr = street_addr                     
AND city = city                     

我错过了关键字错误,加上我不确定逻辑是否有效。任何输入的想法都会非常有用。希望问题很清楚。

谢谢,

Pallavi

1 个答案:

答案 0 :(得分:0)

几乎没有问题,

  1. 您正在尝试根据源表中的单行向目标表插入多行,如果Addr_type_cd ='PROP'将两行添加一个'Prop'而另一行添加'RPT'

  2. 您尝试同时从两行捕获数据并按此插入,如果prop,mail insert prop,mail,rpt

  3. 您应该做的是修复源列(Addr_type_cd)以在需要的地方分组值。之后很简单。 如果source如下所示,我已粘贴相应的代码:

    Table_A_Modified

    Insert into Table_B
    (   
        [Addr_id], 
        [Street_Add],
        [Addr_type_cd],
        [Acct_nbr] ,
        [CITY]
    )
    Select
        [Addr_id], 
        [Street_Add],        
            CASE 
                WHEN addr_type_cd = 'PROP' THEN 'PROP;RPT'   
                WHEN addr_type_cd='MAIL' THEN 'MAIL;RPT'    
                WHEN addr_type_cd='PROP;MAIL' THEN 'PROP;MAIL;RPT'
            END ,
        [Acct_nbr] ,
        [CITY]  
    From Table_A