Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JOINI - NEW, СРОЧНО НУЖНА ПОМОЩ С ЗАПРОСОМ 
V
    Опции темы
Elnarka
Дата 13.2.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Образно говоря,Имею 2 таблицы А и В
Код

А: num,  сode       таблица B.  num,  code  SUMMA
    1        1                                     1        1               10       
    1        2                                     1        2               15 
    1        3                                     2        1               20 
    2        1                                     2        2               25 
    2        2                                     3        1               30
    3        1                                     3        2               35 
                                                     4        1               40   
                                                     4        2               45

Обединив нужно получить
Код

  1      1        10
  1      2        15
  1      3           
  2      1         20
  2      2         25
  3      1         30
  3      2         35 


То есть,нужно объединить таблици так, чтобы  в результате имелись общие id, но по полю  code pluchit chto to vrode full outer join.
Никак это не получается. А если конкретно, вот мой запрос с реальными таблицами....
Код

select nvl(aa.id_contracts,bb.id_contracts),nvl(aa.saldo,0),nvl(aa.Code_tacc,'2'),nvl(bb.sum_prcst_cred,0)
 from 

(SELECT 
  cc.id_contracts  ,
  t.id_tacc ,
  t.code_tacc ,
  S.SALDO
FROM
 DWH.DET_ACCOUNT A, DWH.DET_BALANCE B, DWH.FCT_ACOUNT_SALTRAN S, DWH.DET_CONTRACTS C,
 DWH.CON_ASS_CONTR_ACC CC, DWH.DET_TACC T, DWH.DET_SOURCE SR

WHERE 
A.ID_ACCOUNT = S.ID_ACCOUNT
AND A.ID_BALANCE   = B.ID_BALANCE
AND A.ID_ACCOUNT   = CC.ID_ACCOUNT
AND C.ID_CONTRACTS = CC.ID_CONTRACTS
and c.id_contracts = 17203209
AND CC.ID_TACC     = T.ID_TACC
and t.code_tacc in ('1','2','4','8','9','5','6','27','28','17','29','30')
AND C.ID_SOURCE = SR.ID_SOURCE
AND TO_DATE('02.02.2008', 'DD.MM.YYYY') BETWEEN S.DT_OPEN AND S.DT_CLOSE
AND TO_DATE('02.02.2008', 'DD.MM.YYYY') BETWEEN CC.DT_OPEN AND CC.DT_CLOSE
AND SR.CODE_SOURCE = 'Loans'
AND C.CODE_CONTRACTS NOT LIKE '%gar%'
AND SUBSTR(B.CODE_BALANCE, 1, 1) IN ( '1', '2' )
AND A.IS_GK != '1'
AND '02.02.2008' BETWEEN C.DATE_OPEN AND DECODE(C.DATE_CLOSED,TO_DATE('01.01.3001','DD.MM.YYYY'),C.DATE_END,C.DATE_CLOSED)
) aa,
  (select pr.id_contracts,pr.id_tacc,pr.sum_prcst_cred  from dwh.fct_prcst_cred pr,dwh.det_ord_liab  l where
  l.id_ord_liab = pr.id_ord_liab
  and l.nl_ord_liab = '1'
  and '02.02.2008' between pr.dt_open and pr.dt_close
   )bb   

where 
aa.id_contracts = bb.id_contracts(+) 
and
aa.id_tacc = bb.id_tacc (+)

Только он работает в одну сторону,left join...to est esli v tablice  b net code kotoriye v tablice a,to pishet pusto,,,
a vot esli naoborot,to etu zapis ne vitaskivaet...Esho raz povtorayu id u nix u oboix doljni bit odinakovimi...v etom vsa i zaqvozdka

..Если кто поможет буду благодарна...очень очень
PM MAIL   Вверх
Shaggie
Дата 14.2.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 1
Всего: 72



Код

SELECT a.num, a.code, b.summa
FROM a LEFT OUTER JOIN b ON a.num = b.num AND a.code = b.code

UNION

SELECT b.num, b.code, b.summa
FROM
(
    SELECT b.num, b.code 
    FROM b
    EXCEPT
    SELECT a.num, a.code 
    FROM a
) bnota, b, a
WHERE a.num = bnota.num
AND b.num = bnota.num
AND b.code = bnota.code
/*   AND a.code != bnota.code   --   может пригодиться :-|   */

Это по гипотетическим A и B таблицам, а на реальные данные я даже не смотрел, но, думаю, прикрутить несложно будет.

Добавлено через 43 секунды
EXCEPT не подсвечивается, странно...

Добавлено через 1 минуту и 30 секунд
В Oracle используется MINUS вместо EXCEPT.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Elnarka
Дата 15.2.2008, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



spasibo bolshoye za otvet smile) i za pomosh
PM MAIL   Вверх
Shaggie
Дата 15.2.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 1
Всего: 72



Сам себя перехитрил...  smile  Всё гораздо проще!

Код

SELECT a.num, a.code, b.summa
FROM a LEFT OUTER JOIN b ON a.num = b.num AND a.code = b.code
UNION
SELECT b.num, b.code, b.summa
FROM a left OUTER JOIN b ON a.num = b.num AND a.code <> b.code

И всё, UNION сам выкинет совпадающие поля и оставит корректный результат... Вот ведь век живи - век учись!


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.