Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.032 c
4-42248
Slava_Neo
2003-09-16 10:58
2003.11.13
Как узнать имя программы?


1-41712
Cranium
2003-11-03 18:56
2003.11.13
Как в обработчике события запретить его?


14-41892
Layner
2003-10-21 11:53
2003.11.13
Преобразовывание цифрового ряда из 24 цифр в 48 цифр


6-41793
Zeon
2003-09-16 03:42
2003.11.13
Как разорвать соединение с интернетом?


3-41001
KIR
2003-10-16 11:03
2003.11.13
При запуске UDF разрывается коннект с базой...?!