Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
14-42069
v850
2003-10-23 10:52
2003.11.13
Срочно нужна помощь


6-41848
aldapooh
2003-09-12 10:45
2003.11.13
Сокет


4-42316
Volia
2003-09-05 10:05
2003.11.13
как прочесть содержимое из syslistvew32


1-41717
willys
2003-11-03 16:58
2003.11.13
работа с мат. выражениями


1-41644
Lena19
2003-10-25 21:55
2003.11.13
задержка на выполнеие кода





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский