Как выполнить условное объединение столбцов в SQL?

#sql

#sql

Вопрос:

У меня есть таблицы ниже

Основная таблица: tblMain

 Phase   Country   City    
AAA     India     Bangalore
AAA     USA       Chicago
ZZZ     USA
ZZZ     UK
  

Подтаблица: tblSub

 Phase   Country City    Value
AAA     USA     Chicago   3
AAA     USA     NY        6
AAA     UK      London    5
AAA     India   Bangalore 6
AAA     India   Delhi     9
ZZZ     USA     Chicago   7
ZZZ     UK      London    8
  

Ожидаемый результат

  Phase   Country   City        Value
  AAA     India     Bangalore   6
  AAA     USA       Chicago     3
  ZZZ     USA                   7 
  ZZZ     UK                    8
  

Я хочу объединить это с моей основной таблицей, в которой есть фаза, страна и город, однако условие
Для фазы «ZZZ» я хочу присоединиться только по стране, в то время как для фазы «AAA» я хочу присоединиться к стране и городу. Возможно ли это сделать в SQL-запросе без хранимой процедуры или временных таблиц
Я хочу добиться этого в простом запросе. Заранее спасибо!!!

Ответ №1:

 SELECT *
FROM This_Table TT 
LEFT JOIN Main_Table MT  ON TT.Countrry = MT.Country  
                        AND TT.Phase = 'ZZZ'
LEFT JOIN Main_Table MT2 ON TT.Countrry = MT2.Country 
                        AND TT.City = MT2.City 
                        AND TT.Phase = 'AAA' 
  

Комментарии:

1. Спасибо Али! С запросом, как мне выбрать значение?

2. Не проблема, просто добавьте имена столбцов в оператор select вместо * убедитесь, что вы используете имя из двух частей, т.е. TableName.ColumnName в вашем случае вы будете использовать TableAlias.ColumnName .

3. Что-то вроде этого??? ВЫБЕРИТЕ TT.Phase, TT.Country, TT.City, MT.Value, MT2.Value ИЗ This_Table TT СЛЕВА ПРИСОЕДИНИТЬСЯ К Main_Table MT НА TT.Countrry = MT.Country И TT.Phase = ‘ZZZ’ СЛЕВА ПРИСОЕДИНИТЬСЯ К Main_Table MT2 НА TT.Countrry = MT2.Country И TT. City = MT2.City И TT.Phase = ‘AAA’

4. Вы буквально скопировали мой запрос, вам нужно использовать фактические имена таблиц и имена столбцов: S .

5. я знаю, но вместо *, если я даю столбцы значений, я получаю два разных столбца..

Ответ №2:

Это должно сделать это:

 WHERE 
    (a.phase = 'ZZZ' AND a.country = b.country)
        OR
    (a.phase = 'AAA' AND a.country = b.country AND a.city = b.city)
  

Комментарии:

1. Можете ли вы предоставить мне полный запрос, предположим, что имя моей основной таблицы — MainTable и имеет столбцы Phase, Country, City

2. В основном это есть в вашем комментарии к сообщению М.Али. Это сообщество ожидает, что вы сделаете некоторую работу самостоятельно. Для решения проблемы, с которой вы столкнулись, были представлены два жизнеспособных решения. Этого должно быть достаточно, и вы должны быть в состоянии взять его отсюда.