Текущий архив: 2003.11.13;
Скачать: CL | DM;
ВнизSQL запросы Найти похожие ветки
← →
Feofan (2003-10-22 02:32) [0]1. Каким образом можно учитывать NULL значения?
т.е. например в одной табличке есть список организаций, а во второй данные о денежных переводах.
Например выбираем данные о суммах переводах на какое-нибудь число по каждой из фирм, в итоге получаем
список фирм и суммы - но не получаем те фирмы у которых денежных переводов в этот день не было, а хотелось бы получить и их тоже, только с суммой 0.0 !
2. Таже самая таблица с денежными переводами. Нужно получить данных о переводах одной фирмы за год например в таком виде:
Январь | Февраль | Март | ....
------------------------------
сумма | сумма | сумма |
Спасибо
← →
Rad (2003-10-22 03:31) [1]1. К примеру,
LEFT JOIN
← →
Reindeer Moss Eater (2003-10-22 08:38) [2]Лучше OUTER JOIN
← →
Danilka (2003-10-22 08:41) [3]А какая СУБД?
Если ОРОКОЛ, то там нет джойна, надо делать примерно так:
SELECT
t1.field1,
t2.field1
FROM
TABLE1 t1,
TABLE2 t2
WHERE t1.field2=t2.field2(+)
← →
Johnmen (2003-10-22 09:19) [4]>Reindeer Moss Eater © (22.10.03 08:38)
>Лучше OUTER JOIN
Чем ?
>Danilka © (22.10.03 08:41)
Это и есть джоин, просто такое своеобразное оракловое написание...:)
← →
Reindeer Moss Eater (2003-10-22 09:22) [5]Тем, что автору надо открытое соединение.
← →
Zacho (2003-10-22 09:26) [6]
> Reindeer Moss Eater © (22.10.03 09:22) [5]
А LEFT JOIN всегда будет внешним. Как ты представляешь себе LEFT INNER JOIN ? И чем он должен отличаться от просто INNER JOIN или RIGHT INNER JOIN ?
:-)
← →
Reindeer Moss Eater (2003-10-22 09:29) [7]Уговорили. OUTER всегда хуже чем LEFT когда нужно открытое соединение и неизвестен тип сервера.
Так что ли?
← →
Johnmen (2003-10-22 09:29) [8]>Reindeer Moss Eater © (22.10.03 09:22)
>...надо открытое соединение
Не очень понимаю, что значит "открытое"...
А автору нужно "левое" ("правое"). Т.к. соединение со справочником. А значит не м.б. переводов, не имеющих организации.
← →
Zacho (2003-10-22 09:31) [9]
> Reindeer Moss Eater © (22.10.03 09:29) [7]
Тогда бы и писал полностью LEFT OUTER JOIN. А просто OUTER JOIN - абстракция какая-то.
← →
Johnmen (2003-10-22 09:32) [10]>Reindeer Moss Eater © (22.10.03 09:29)
OUTER (внешние) соединения бывают трех типов:
LEFT, RIGHT, FULL
Какое ты имел в виду ?
И, кстати, [OUTER]
:)
← →
Reindeer Moss Eater (2003-10-22 09:41) [11]LEFT RIGHT - способ указать серверу какая таблица находится слева (справа) в открытом соединении.
Поэтому ответ зависит от конкретики потребностей автора.
← →
Feofan (2003-10-22 11:07) [12]Конкретезируем
таблица A:
a1 | a2 | a3
-----------------
1 | 1.3|20.01.03
2 | 2.5|21.02.03
2 | 3.3|04.01.03
таблица B:
b1 | b2
-------
1 | q
2 | w
3 | e
Делаем запрос
SELECT b2,SUM(a2) FROM A,B GROUP BY b2 WHERE MONTH(a3)=1 AND b1=a1
Получаем
q | 1.3
---------
w | 3.3
---------
e | 0.0
но надо
q | 1.3
---------
w | 3.3
← →
Feofan (2003-10-22 11:10) [13]То есть наоборот
Получаем
q | 1.3
---------
w | 3.3
а надо
q | 1.3
---------
w | 3.3
---------
e | 0.0
← →
Johnmen (2003-10-22 11:13) [14]>... а хотелось бы получить и их тоже, только с суммой 0.0 !
>но надо
>
>q | 1.3
>---------
>w | 3.3
Явное противоречие...:)
Но тем не менее, для второго случая, используй [INNER] JOIN.
← →
Johnmen (2003-10-22 11:15) [15]>Feofan © (22.10.03 11:10)
Тогда LEFT/RIGHT JOIN
Ты вообще читаешь ответы ?
← →
Vlad (2003-10-22 11:17) [16]SELECT b.b2,SUM(a.a2) FROM A left join B on a.a1=B.b1 GROUP BY b2 WHERE MONTH(a.a3)=1
← →
Aleksei (2003-10-22 11:42) [17]Johnmen
Тогда LEFT/RIGHT JOIN
Ты вообще читаешь ответы ?
Читаю не кричи :)
Есть такой
вариант
SELECT b2,SUM(NVL(a2,0)) FROM B LEFT JOIN A ON A.a1=B.b1 GROUP BY b2
q | 1.3
---------
w | 3.3
---------
e | 0.0
Но сумма считает по всем датам!
А как только:
SELECT b2,SUM(NVL(a2,0)) FROM B LEFT JOIN A ON A.a1=B.b1 GROUP BY b2 WHERE MONTH(a3)=1
то сразу получаем
q | 1.3
---------
w | 3.3
вот такая промблема!
← →
Sandman25 (2003-10-22 12:45) [18]Наверное надо
SELECT b2,SUM(NVL(a2,0)) FROM B LEFT JOIN A ON A.a1=B.b1 and month(A.a3)=1
GROUP BY b2
Страницы: 1 вся ветка
Текущий архив: 2003.11.13;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c