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

Откуда:
Сообщений: 365
Туплю.
Надо получить все строки из левой таблицы без повторений и присоединеть те что совпадают в правой. Причем строк должно ровно стока сколько в левой.
Левая таблица - начисленные суммы - правая - расшифрвка кому

select *  FROM         ZpSvod
where ZpSvod.zpname='201212'

(50718 row(s) affected)

SELECT     ZpSvod.SUMMA, ZpSvod.TABN, ZpSvod.zpname
, dbo.ZpSvod.NO, dbo.ZpSvod.KR 
FROM         ZpSvod
LEFT OUTER   JOIN
(SELECT     NO, TABN, MAX(DAT_POST) AS Expr1, CASE WHEN KR = 9 THEN 1 ELSE 2 END AS workbas, LEFT(FileName,4) as zpname
FROM         TabelSvod
GROUP BY NO, TABN, CASE WHEN KR = 9 THEN 1 ELSE 2 END, FileName
HAVING      (FileName = '20121201')) tab
ON  cast(LEFT(ZpSvod.zpname,4) as int)=cast(tab.zpname as int) AND ZpSvod.TABN = tab.TABN
 and (CASE WHEN zpsvod.KR = '9' THEN 1 ELSE 2 END) = tab.workbas
 where ZpSvod.zpname='201212'

(50793 row(s) affected)


Надо - 50718 .
Понимаю что вопрос глупый . ID нет и небудет (таблиы получены импортом из DBF)
24 янв 13, 14:43    [13821810]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ну так добейтесь, чтоб в правой "таблице" у Вас так же было 50718 записей.
24 янв 13, 14:46    [13821849]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
philips
Member

Откуда:
Сообщений: 365
Мне нужно чтобы это было всегда автоматически
24 янв 13, 14:55    [13821914]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
radya
Member

Откуда: Москва
Сообщений: 20
philips,
Это происходит из за того , что на одну запись в левой может приходиться несколько записей в правой. (по связи в left join)
Сделайте , чтобы в правой таблице сочетания столбцов (tab.zpname , tab.TABN , tab.workbas) были уникальными - проблемы не будет
24 янв 13, 15:41    [13822333]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
Cygapb-007
Member

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

SELECT     ZpSvod.SUMMA, ZpSvod.TABN, ZpSvod.zpname
, dbo.ZpSvod.NO, dbo.ZpSvod.KR
, tab.TABN
FROM ZpSvod
LEFT OUTER JOIN
...
where ZpSvod.zpname='201212'
and tab.TABN is NULL
24 янв 13, 16:16    [13822649]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
user89
Member

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

select * FROM ZpSvod
Зарплата?
На прошлой неделе наша фин. служба тоже попросила сделать нечто похожее, только источниками были не DBF, а Excel-файлы.
Я кинул их во временные таблицы #tmp1 #tmp2, сделал row_number() по нужным столбцам и джойнил по этим нумерованным полям.

philips, попробуйте, по идее должно получиться.
25 янв 13, 10:01    [13825760]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
philips
Member

Откуда:
Сообщений: 365
Меня больше интересует теоретический вопрос (может кто-то даст ссылку).
Как соединить 2 таблицы чтобы были все строки из левой таблицы и ни одной не дублировалость при соединении (типа Select Top 1 из правой по группе). Лучше ошибка (исключение ) в процедуре чем удвоение данных.
25 янв 13, 13:41    [13827492]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
philips
Как соединить 2 таблицы чтобы были все строки из левой таблицы

left join
philips
и ни одной не дублировалость при соединении (типа Select Top 1 из правой по группе)

apply join
25 янв 13, 13:43    [13827519]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8823
Glory
philips
и ни одной не дублировалость при соединении (типа Select Top 1 из правой по группе)

apply join

Только ещё указать select top 1 для сджойненной таблицы.


P.S. А что делать если в правой таблице нет соответствующей записи? ;-)
26 янв 13, 01:39    [13831784]     Ответить | Цитировать Сообщить модератору
 Re: Получить столько строк сколько в левой таблице  [new]
Sekoka
Member

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

группируеш поле NO в таблице TabelSvod, но ни с чем не связываеш его... поэтому и разное количество строк у тебя....
27 янв 13, 17:59    [13835838]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить