Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Rash843 Member Откуда: Сообщений: 4 |
Здравствуйте! Нужна помощь, никак не могу найти решение следующей задачке: Есть три таблицы: --------таблица T0--------------
----------таблица T1------------
----------таблица T2------------
Необходимо запросом получить таблицу вида (без использования INSERT и UPDATE): ----------таблица T3------------
P.S. Используется MS SQL 2005 текст примера
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 июн 12, 18:35 [12784833] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
Rash843, вам нужен JOIN |
27 июн 12, 18:41 [12784867] Ответить | Цитировать Сообщить модератору |
Rash843 Member Откуда: Сообщений: 4 |
Shakill, Если бы все так было просто...))) Обычный JOIN (в данном случае LEFT JOIN) нужного результата не дает... К примеру, если для конкретного значения id на каждую запись из таблицы T1 приходится n1 записей, и из таблицы T2 приходится n2 Записей, то обычный последовательный LEFT JOIN таблиц T1 и T2 к таблице T0 по полю id приводит к кол-ву записей N= n1*n2, еще и с дублированием данных (вместо которых должны быть NULL). |
27 июн 12, 21:42 [12785409] Ответить | Цитировать Сообщить модератору |
ultima Member Откуда: СПб Сообщений: 121 |
Подумайте над изменением архитектуры первичных данных, таблицы T1 и T2 не нормальные, ID не первичный ключ |
|||||||||||||||||
27 июн 12, 22:36 [12785576] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
with a as ( select t0.ID, t1.Zag, row_number() over (partition by t0.ID order by t1.Zag) as n from @T0 t0 left join @T1 t1 on t1.ID = t0.ID ), b as ( select t0.ID, t2.Way, row_number() over (partition by t0.ID order by t2.Way) as n from @T0 t0 left join @T2 t2 on t2.ID = t0.ID ) select isnull(a.ID, b.ID), a.Zag, b.Way from a full join b on b.ID = a.ID and b.n = a.n |
27 июн 12, 23:09 [12785730] Ответить | Цитировать Сообщить модератору |
Rash843 Member Откуда: Сообщений: 4 |
ultima, Это лишь тестовый пример. По факту есть множество таблиц, каждая из которых хранит какие либо данные для некого множества объектов со своими id. Эти таблицы связаны между собой лишь ссылкой на объект. Неужели нет варианта свести эти данные в одну таблицу, имеющею вид своеобразного отчета (исключая дублирование полей данных для каждого объекта). Конечно, можно формировать данную таблицу как временную, использую INSERT и UPDATE, либо обработать результат запроса, формируемого последовательным LEFT JOIN, программным путем, используя язык программирования. Но все же хочется решить данную задачу средствами T-SQL, причем без INSERT и UPDATE (для скорости). |
27 июн 12, 23:19 [12785793] Ответить | Цитировать Сообщить модератору |
Rash843 Member Откуда: Сообщений: 4 |
invm, Благодарю, все работает как надо!!! |
28 июн 12, 09:42 [12786726] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |