2013-07-19 2 views
0

У меня есть таблица 1, которая выглядит следующим образомSQL Server, саз по нескольким таблицам, ВПР

ID1 ID2   Name      Balance 
10232 22  Building America   7000 
10233 22  Long term     3400 
10234 25   Capital     2300 

Таблица 2 выглядит следующим образом

ID1 note  Balance 
10233 2   5000 
10234 1  3500 

Код должен сначала пройти таблицу в таблицу 1, и проверьте, существует ли идентификатор ID1 в таблице 2, если он не существует, тогда выберите «Баланс» по таблице 1. Если он существует в таблице 2 и находит, что примечание равно 1, оно все равно берет баланс из Таблицы 1, и если оно что примечание в таблице 2 больше 1, тогда оно проверяет, имеет ли ID1 несколько ID2, и если у него есть несколько ID2, то ch ecks, если есть другой ID1, который не совпадает, а затем добавляет баланс из Таблицы 2 и другого идентификатора, найденного в таблице 1. Итак, для ID1 = 10233 код переходит в таблицу 2 и находит, что примечание равно 2. Соответствующий ID2 из 10233 равен 22. Затем он проверяет, есть ли какой-либо ID1, который содержит тот же ID2. Два ID1, которые имеют одинаковый ID2, являются 10232 и 10233. Затем он добавляет баланс 10233 из таблицы 2, а затем добавляет баланс 10232 из таблицы 1. Таким образом, баланс для этого идентификатора составляет 5000 + 7000 = 12 000.

Для ID 10234 это 2300, как он считает, что примечание 1 и поднимает только из таблицы 1.

Am имея много проблем с логикой здания вокруг этого, и я застрял только с кучей саза , Любая помощь будет оценена по достоинству.

+0

Geeee ... Вот один адский логики. Найдите парня, ответственного за это, и сделайте ему что-то плохое. – OzrenTkalcecKrznaric

ответ

1

Всякий раз, когда ваша логика становится этой запутанной, это красный флаг, который должен учитывать ваш дизайн базы данных, чтобы не понюхать и рефакторинг. Тем не менее, этот Fiddle показывает запрос, который работает.

Редактировать: Ваше описание не дало понять, следует ли исключать «Строительство Америки», так как оно связано с долгосрочным. Если это так, посмотрите на this fiddle.

0

Просто, чтобы вы начали: сделать левое соединение:

SELECT <...> 
FROM dbo.table1 t1 
LEFT OUTER JOIN dbo.table2 t2 
ON t1.ID1 = t2.ID2 

, то вы можете получить доступ ко всем столбцы двух таблиц в одном случае заявление. Если в таблице 2 нет подходящей строки, эти столбцы будут установлены в NULL.

Подробнее о различных присоединяется вы можете найти здесь: http://sqlity.net/en/1146/a-join-a-day-introduction/

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