2013-12-14 6 views
0
  1. SQL 2012
  2. Невозможно изменить столов
  3. есть две таблицы в вопросе, обе таблицы идентичны
  4. (я не дизайн это)

Таблица A содержит данные приложения. Мы принимаем заявки, и на момент подачи заявки нам требуется минимум информации - многие значения здесь могут быть нулевыми (или некоторые заполнитель, например NA и т. Д.). Ему присваивается номер приложения (идентификатор приложения). Если приложение принято, нам требуется дополнительная информация - и мы проверяем его.Объединить две таблицы и возвращает данные либо из одной или другой на основе данных

Превращение нас в таблицу B - копию A за исключением того, что она заполнена только принятыми приложениями - и проверенными данными. Таким образом, идентификатор приложения будет существовать только в таблице B, если менеджер примет его. Иногда в процессе приложения данные верны и никаких изменений не было сделано, что приводит к тому, что идентификатор приложения имеет точные значения в обеих таблицах. Иногда данные изменяются или добавляются (мы требуем все поля при принятии).

Я хотел бы, чтобы простой способ захватить все приложения и самые текущие/проверенные данные.

Например:

Table A (Active Applications) 
ApplicationID Phone   State  
1234    123-456-7890 AK   
5678    246-802-4680 NULL  

Table B (Approved/Accepted Applications) 
ApplicationID Phone   State  
5678    246-802-4680  NY   

Применение 5678 был утвержден и, только для демонстрации, состояние было подтверждено, что штат Нью-Йорк. Приложение 1234 не было одобрено на сегодняшний день (но, возможно, в будущем).

Я хотел бы написать запрос, который дает следующий результат:

ApplicationID Phone   State 
1234    123-456-7890  AK 
5678    246-802-4680  NY 

Желаемое поведение по существу ... вернуться таблицей А если ApplicationID не существует в таблице, то дайте мне таблицу B вместо этого.

В таблице А содержится все приложения, срок действия которых истек или нет, но есть срок годности (приложения полезны в течение 10 дней), и их будет легко отбросить на основании этой даты. Просто сбитый с толку, требуя одобренных и активных приложений.

Любая помощь очень ценится.

--EDIT-- Спасибо ... но как обращаться с заполнителями (например, NA или XX) или когда проверенные данные отличаются от данных приложения? Скажем, есть третий активное применение в качестве так:

Table A (Active Applications) 
    ApplicationID Phone   State 
    9876    234-432-1234  NY 

    Table B (Approved Applications) 
    ApplicationID Phone   State 
    9876    234-432-1234  TX 

Заявление было принято в силу своего существования в таблице В, но состояние было подтверждено, что Техас, а не Нью-Йорк.

Я хотел бы видеть выход как таковой ... Таблица A данных, если нет в таблице B. IF В таблице B, а затем в таблице B данных.

ApplicationID  Phone   State 
1234    123-456-7890  AK 
5678    246-802-4680  NY 
9876    234-432-1234  TX 

ответ

0
Select a.applicationid, case when b.phone is null then a.phone else b.phone end as phone, case when b.state is null then a.state else b.state end as state 
From a 
Left outer join b on a.applicationid = b.applicationid 
0
select 
a.applicationid as a1, a.phone as a2, a.state as a3, 
b.applicationid as b1, b.phone as b2, b.state as b3, 
isnull(b.applicationid, a.applicationid) as applicationid, 
isnull(b.phone, a.phone) as phone, 
isnull(b.state, a.state) as state 
from a 
left outer join b on a.applicationid=b.applicationid 

(опустить строку 2 и 3, это просто, чтобы показать, что элементы столбцов перед тем ISNULL())

Смежные вопросы