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

Откуда:
Сообщений: 5
Прошу помощи специалистов!
Надо совместить таблицы без декартова умножения!
Есть две таблицы, списки документов с их реквизитами, надо совместить таблицы по двум полям - Дата и Сумма.
Без перебора строк, в одном запросе.
У меня есть:
select  
  Поле1 as Контр
  Поле2 as НомерДок
  Дата as ДатаДок
  Сумма as СуммаДок
.....
и:

select   
  Поле3 as Контр2
  Поле4 as НомерДок2
  Дата as ДатаДок
  Сумма as СуммаДок
........


как их объединить, чтобы не раздваивались строки ни первой ни второй таблицы, а там где ДатаДок и СуммаДок совпадают -
Контр, НомерДок, ДатаДок, СуммаДок, Контр2, НомерДок2 встали в одну строку, а где не нашли для себя соответствия - было пусто. Проблема в том, что каждый документ только в одной строке должен участвовать и права и слева.
Прочитала, что можно пронумеровать строки. Это бы решило проблему, если бы можно было пронумеровать документы в пределах одного дня, тогда бы я написала FULL JOIN (таб1.ДатаДок=таб2.ДатаДок) AND (таб1.СуммаДок=таб2.СуммаДок) AND (таб1.НомерВДне=таб2.НомерВДне), но как этот номер получить?
Буду очень благодарна за советы!
15 апр 14, 13:24    [15884711]     Ответить | Цитировать Сообщить модератору
 Re: помогите совместить таблицы без декартово умножения  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Нася85,

PARTITION BY
15 апр 14, 13:26    [15884732]     Ответить | Цитировать Сообщить модератору
 Re: помогите совместить таблицы без декартово умножения  [new]
Нася85
Member

Откуда:
Сообщений: 5
iap, спасибо за быстрый ответ! пошла читать :)
15 апр 14, 13:35    [15884789]     Ответить | Цитировать Сообщить модератору
 Re: помогите совместить таблицы без декартово умножения  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
чото мне кажется что не нужна ей никакая нумерация и partition by а всё таки просто full outer join
declare @table1 table([Контр] int,[НомерДок] varchar(10),[ДатаДок] datetime,[Сумма] money)
declare @table2 table([Контр] int,[НомерДок] varchar(10),[ДатаДок] datetime,[Сумма] money)
INSERT INTO @table1([Контр],[НомерДок],[ДатаДок],[Сумма]) values(1,'№1','20140415',200),(2,'№2','20140416',100)
INSERT INTO @table2 ([Контр],[НомерДок],[ДатаДок],[Сумма])values(3,'№3','20140416',100),(4,'№4','20140417',300)

SELECT t1.[Контр],t1.[НомерДок],t2.[Контр] as [Контр2],t2.[НомерДок] as [НомерДок2]
,isnull(t1.[ДатаДок],t2.[ДатаДок])  as [ДатаДок]
,isnull(t1.[Сумма],t2.[Сумма]) as [Сумма]   
FROM @table1 t1
FULL OUTER JOIN @table2 t2
ON t1.[ДатаДок] = t2.[ДатаДок]
AND t1.[Сумма] = t2.[Сумма]
ORDER BY isnull(t1.[ДатаДок],t2.[ДатаДок])
15 апр 14, 15:52    [15885810]     Ответить | Цитировать Сообщить модератору
 Re: помогите совместить таблицы без декартово умножения  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
LexusR
чото мне кажется что не нужна ей никакая нумерация и partition by а всё таки просто full outer join
Я реагировал только на
Нася85
Прочитала, что можно пронумеровать строки. Это бы решило проблему, если бы можно было пронумеровать документы в пределах одного дня
15 апр 14, 15:55    [15885828]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить