Справка по SQL-запросам по условиям

У меня есть таблица 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, заполнив другой столбец ADDR_TYPE_CD в таблице B на основе приведенных ниже правил

  • ГДЕ STREET_ADD=STREET_ADD и CITY = CITY
  • IF ADDR_TYPE_cd = PROP и MAIL,
  • THEN ADDR_TYPE_CD в TABLE B = PROP, MAIL, RPT
  • IF ADDR_TYPE_cd = PROP
  • THEN ADDR_TYPE_CD в TABLE B = PROP, RPT
  • IF ADDR_TYPE_cd = MAIL
  • THEN ADDR_TYPE_CD в TABLE B = 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 ответ

Есть несколько проблем,

  1. Вы пытаетесь вставить несколько строк в таблицу Target, основываясь на одной строке в исходной таблице, если Addr_type_cd = 'PROP' вставьте две строки: одну с "Prop" и другую с "RPT"

  2. Таким же образом вы пытаетесь захватить данные из двух строк одновременно и вставить в соответствии с этим, если prop, mail вставьте prop, mail, rpt

Что вы должны сделать, это исправить исходный столбец (Addr_type_cd) чтобы сгруппировать значения, где это необходимо. После этого все просто. Если источник был как ниже, я вставил соответствующий код:

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
Другие вопросы по тегам