Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Группировка данных  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
Есть таблица:
IDClientFIO
1Сидоров
2Потапов
2Филатов
3Петров


На вход подаются два разных IDClient1 и IDClient2. Нужно в каждом столбце вывести людей для каждого ID.

Т.е. На вход подаем IDClient1=1 и IDClient2=2 на выходе должны получить вот такую табличку:

Client1FIOClient2FIO
СидоровПотапов
NULLФилатов
21 сен 11, 16:30    [11313539]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
Hamber,

select?
21 сен 11, 17:00    [11313926]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Пронумеровать и сджойнить.
21 сен 11, 17:06    [11313996]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap,

А какой JOIN использовать?
LEFT, RIGHT, INNER не подходят.
21 сен 11, 17:17    [11314110]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap,

И OUTER JOIN тоже не подходит.
21 сен 11, 17:18    [11314122]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
И OUTER JOIN тоже не подходит.

FULL OUTER подходит
21 сен 11, 17:22    [11314157]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
iap, а на примере можно?
21 сен 11, 17:24    [11314170]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Hamber
iap, а на примере можно?
Для всех версий?
21 сен 11, 17:39    [11314300]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
SQL2005
21 сен 11, 17:48    [11314379]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap,

У меня не получается. вот попытка

SELECT * FROM ddf

DECLARE @s1 INT
DECLARE @s2 INT

SET @s1 =1
SET @s2 =2

SELECT t1.FIO, t2.FIO
FROM
(
select FIO
from ddf 
where id=@s1
) t1
FULL JOIN
(select FIO
from ddf 
where id=@s2)t2 ON t1.FIO =t2.FIO

Получилось так
NULL Потапов
NULL Филатов
Сидоров NULL
21 сен 11, 17:50    [11314399]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
У меня не получается. вот попытка

А где нумерация то ?
21 сен 11, 17:51    [11314403]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Glory,

Получилось, но как это работает не понятно.
FULL JOIN это все записи со всеми. А дальше, как логику понять? помогите ссылкой или объяснением логики.

SELECT t1.FIO, t2.FIO
FROM
(
select ROW_NUMBER() OVER (ORDER BY FIO) AS dd, FIO
from ddf 
where id=@s1
) t1
FULL JOIN
(select ROW_NUMBER() OVER (ORDER BY FIO) AS dd2, FIO
from ddf
where id=@s2)t2 ON t1.dd =t2.dd2
21 сен 11, 18:08    [11314496]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
trew
помогите ссылкой или объяснением логики.


Легко, но и вы усилия для понимания прикладывайте. Задание один: при условии что @s1=1 и @s2=2 показать тут, в топике, два промежуточных резалт-сета генерируемых вложенными select-ами. Такое осилите?
21 сен 11, 18:23    [11314601]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
Ural2
Member

Откуда:
Сообщений: 58
Сама постановка задачи хромает на обе ноги: сделать ненормализованную выборку из ненормализованной таблицы.
Какой ключ у вас на таблице? ФИО? Вы считаете, что ФИО подходит для уникальной идентификации?
Ищите другое решение.
21 сен 11, 18:36    [11314672]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
SamMan,

автор
Легко, но и вы усилия для понимания прикладывайте. Задание один: при условии что @s1=1 и @s2=2 показать тут, в топике, два промежуточных резалт-сета генерируемых вложенными select-ами. Такое осилите?

Конечно, были бы учителя :)

Как работает FULL JOIN ?

Получается, создается некий виртуальный столбец нумерации (1, 2, 3, 4, 5 и т.д.)
и к нему LEFT JOIN данные первой выборки
и к нему LEFT JOIN данные второй выборки. Это все условно.

Но почему данные не задваиваются, для первого столбца где одно значение, не понятно?
FULL JOIN это ведь все со всеми.

Нужна помощь в объяснении логики работы. (или это заучивается как таблица умножения, без объяснений).
21 сен 11, 19:02    [11314892]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
trew
Но почему данные не задваиваются, для первого столбца где одно значение, не понятно?
FULL JOIN это ведь все со всеми.


потому что слева и справа у вас уникальные номера сгенерированные row_number, которые соотносятся как "1 к 0 или 1"

грубо говоря у вас 2 резалт сета (1,2,3) и (1,2,3,4,5) и вы соединяете фул джоином по этим номерам, в тоге у вас 5 записей, где с 1вого по 3тий есть оба значения, а с 4 по 5 только со 2торого резалт сета
21 сен 11, 19:11    [11314943]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
iljy
Member

Откуда:
Сообщений: 8711
trew,

все со всеми - это CROSS JOIN. А FULL JOIN можно записать примерно так:
select t1.*, t2.* from Table1 t1 full join Table2 t2 on t1.id = t2.id

-- эквивалентно

select t1.*, t2.* from Table1 t1 left join Table2 t2 on t1.id = t2.id
   union all
select NULL /*для всех полей t1*/, t2.* from Table2 t2
where not exists (select * from Table1 t1 where  t1.id = t2.id)
21 сен 11, 19:15    [11314970]     Ответить | Цитировать Сообщить модератору
 Re: Группировка данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
На примере разобрался, благодарю.
21 сен 11, 21:09    [11315606]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить