Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Ну так добейтесь, чтоб в правой "таблице" у Вас так же было 50718 записей. |
24 янв 13, 14:46 [13821849] Ответить | Цитировать Сообщить модератору |
philips Member Откуда: Сообщений: 365 |
Мне нужно чтобы это было всегда автоматически |
24 янв 13, 14:55 [13821914] Ответить | Цитировать Сообщить модератору |
radya Member Откуда: Москва Сообщений: 20 |
philips, Это происходит из за того , что на одну запись в левой может приходиться несколько записей в правой. (по связи в left join) Сделайте , чтобы в правой таблице сочетания столбцов (tab.zpname , tab.TABN , tab.workbas) были уникальными - проблемы не будет |
24 янв 13, 15:41 [13822333] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
philips,SELECT ZpSvod.SUMMA, ZpSvod.TABN, ZpSvod.zpname |
24 янв 13, 16:16 [13822649] Ответить | Цитировать Сообщить модератору |
user89 Member Откуда: Сообщений: 2083 |
philips,select * FROM ZpSvodЗарплата? ![]() На прошлой неделе наша фин. служба тоже попросила сделать нечто похожее, только источниками были не DBF, а Excel-файлы. Я кинул их во временные таблицы #tmp1 #tmp2, сделал row_number() по нужным столбцам и джойнил по этим нумерованным полям. philips, попробуйте, по идее должно получиться. |
25 янв 13, 10:01 [13825760] Ответить | Цитировать Сообщить модератору |
philips Member Откуда: Сообщений: 365 |
Меня больше интересует теоретический вопрос (может кто-то даст ссылку). Как соединить 2 таблицы чтобы были все строки из левой таблицы и ни одной не дублировалость при соединении (типа Select Top 1 из правой по группе). Лучше ошибка (исключение ) в процедуре чем удвоение данных. |
25 янв 13, 13:41 [13827492] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
left join
apply join |
||||
25 янв 13, 13:43 [13827519] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Только ещё указать select top 1 для сджойненной таблицы. P.S. А что делать если в правой таблице нет соответствующей записи? ;-) |
||||
26 янв 13, 01:39 [13831784] Ответить | Цитировать Сообщить модератору |
Sekoka Member Откуда: Сообщений: 73 |
philips, группируеш поле NO в таблице TabelSvod, но ни с чем не связываеш его... поэтому и разное количество строк у тебя.... |
27 янв 13, 17:59 [13835838] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |