Получить столько строк сколько в левой таблице

philips
Дата: 24.01.2013 14:43:03
Туплю.
Надо получить все строки из левой таблицы без повторений и присоединеть те что совпадают в правой. Причем строк должно ровно стока сколько в левой.
Левая таблица - начисленные суммы - правая - расшифрвка кому

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)
pkarklin
Дата: 24.01.2013 14:46:43
Ну так добейтесь, чтоб в правой "таблице" у Вас так же было 50718 записей.
philips
Дата: 24.01.2013 14:55:54
Мне нужно чтобы это было всегда автоматически
radya
Дата: 24.01.2013 15:41:33
philips,
Это происходит из за того , что на одну запись в левой может приходиться несколько записей в правой. (по связи в left join)
Сделайте , чтобы в правой таблице сочетания столбцов (tab.zpname , tab.TABN , tab.workbas) были уникальными - проблемы не будет
Cygapb-007
Дата: 24.01.2013 16:16:23
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
user89
Дата: 25.01.2013 10:01:07
philips,

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

philips, попробуйте, по идее должно получиться.
philips
Дата: 25.01.2013 13:41:11
Меня больше интересует теоретический вопрос (может кто-то даст ссылку).
Как соединить 2 таблицы чтобы были все строки из левой таблицы и ни одной не дублировалость при соединении (типа Select Top 1 из правой по группе). Лучше ошибка (исключение ) в процедуре чем удвоение данных.
Glory
Дата: 25.01.2013 13:43:09
philips
Как соединить 2 таблицы чтобы были все строки из левой таблицы

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

apply join
SIMPLicity_
Дата: 26.01.2013 01:39:41
Glory
philips
и ни одной не дублировалость при соединении (типа Select Top 1 из правой по группе)

apply join

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


P.S. А что делать если в правой таблице нет соответствующей записи? ;-)
Sekoka
Дата: 27.01.2013 17:59:29
philips,

группируеш поле NO в таблице TabelSvod, но ни с чем не связываеш его... поэтому и разное количество строк у тебя....