Главная страница
    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.035 c
1-41254
phan
2003-10-29 23:18
2003.11.13
Вставка визуального коспонента в StringGrid/DrawGrid


1-41729
Saturn
2003-11-03 15:45
2003.11.13
Хитрый вопрос. :)


7-42201
ksa2002
2003-08-27 11:37
2003.11.13
МОДЕМЫ


3-40948
AlexandrKu
2003-10-17 10:21
2003.11.13
SQL FastReport


14-42008
p0tia
2003-10-16 17:08
2003.11.13
Программное добавление компонентов в uses





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский