SQL запросы(NULL)
От: oSandmaNo  
Дата: 21.10.03 22:30
Оценка:
1. Каким образом можно учитывать NULL значения?
т.е. например в одной табличке есть список организаций, а во второй данные о денежных переводах.
Например выбираем данные о суммах переводах на какое-нибудь число по каждой из фирм, в итоге получаем
список фирм и суммы — но не получаем те фирмы у которых денежных переводов в этот день не было, а хотелось бы получить и их тоже, только с суммой 0.0 !

2. Таже самая таблица с денежными переводами. Нужно получить данных о переводах одной фирмы за год например в таком виде:

Январь | Февраль | Март | ....
------------------------------
сумма | сумма | сумма |

Спасибо
Re: SQL запросы(NULL)
От: phwp  
Дата: 21.10.03 22:45
Оценка:
Здравствуйте, oSandmaNo, Вы писали:

SN>1. Каким образом можно учитывать NULL значения?

SN>т.е. например в одной табличке есть список организаций, а во второй данные о денежных переводах.
SN>Например выбираем данные о суммах переводах на какое-нибудь число по каждой из фирм, в итоге получаем
SN>список фирм и суммы — но не получаем те фирмы у которых денежных переводов в этот день не было, а хотелось бы получить и их тоже, только с суммой 0.0 !

SN>2. Таже самая таблица с денежными переводами. Нужно получить данных о переводах одной фирмы за год например в таком виде:


SN>Январь | Февраль | Март | ....

SN>------------------------------
SN>сумма | сумма | сумма |

SN>Спасибо


SQL Server:


isnull(col, 0)
Re: SQL запросы(NULL)
От: Dimka Россия  
Дата: 22.10.03 05:55
Оценка:
Здравствуйте, oSandmaNo, Вы писали:

SN>1. Каким образом можно учитывать NULL значения?

SN>т.е. например в одной табличке есть список организаций, а во второй данные о денежных переводах.
SN>Например выбираем данные о суммах переводах на какое-нибудь число по каждой из фирм, в итоге получаем
SN>список фирм и суммы — но не получаем те фирмы у которых денежных переводов в этот день не было, а хотелось бы получить и их тоже, только с суммой 0.0 !

SN>2. Таже самая таблица с денежными переводами. Нужно получить данных о переводах одной фирмы за год например в таком виде:


SN>Январь | Февраль | Март | ....

SN>------------------------------
SN>сумма | сумма | сумма |

SN>Спасибо


Если Оракле то есть функция NVL ("ПОЛЕ","ЗНАЧЕНИЕ_ЕСЛИ_ПОЛЕ_NULL")

в MySQL IFNULL("ПОЛЕ","ЗНАЧЕНИЕ_ЕСЛИ_ПОЛЕ_NULL")

Соответственно возвращают значение поля если оно не NULL
в противном случае "ЗНАЧЕНИЕ_ЕСЛИ_ПОЛЕ_NULL"

тебе надо сделать что-то вроде SUM (IFNULL("ПОЛЕ",0)) ...
- нельзя впихать невпихуемое :)
Re: SQL запросы(NULL)
От: oSandmaNo  
Дата: 22.10.03 07:09
Оценка: -1
Здравствуйте, oSandmaNo, Вы писали:

SN>1. Каким образом можно учитывать NULL значения?

SN>т.е. например в одной табличке есть список организаций, а во второй данные о денежных переводах.
SN>Например выбираем данные о суммах переводах на какое-нибудь число по каждой из фирм, в итоге получаем
SN>список фирм и суммы — но не получаем те фирмы у которых денежных переводов в этот день не было, а хотелось бы получить и их тоже, только с суммой 0.0 !

SN>2. Таже самая таблица с денежными переводами. Нужно получить данных о переводах одной фирмы за год например в таком виде:


SN>Январь | Февраль | Март | ....

SN>------------------------------
SN>сумма | сумма | сумма |

SN>Спасибо


Конкретезируем

таблица 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


но надо

q | 1.3
---------
w | 3.3
---------
e | 0.0
Re[2]: SQL запросы(NULL)
От: Dimka Россия  
Дата: 22.10.03 07:37
Оценка:
Здравствуйте, oSandmaNo, Вы писали:

SN>Конкретезируем


Да ... надо было сразу так сказать.


я не проверял, но может так

SELECT b2,SUM( IFNULL (a2,0) ) FROM B LEFT JOIB A on b1=a1 GROUP BY b2 WHERE MONTH(a3)=1


не могу ща проверить, по этому если не работает подумаю потом — дома
- нельзя впихать невпихуемое :)
Re[2]: SQL запросы(NULL)
От: LantY Россия icq:56949749
Дата: 22.10.03 07:37
Оценка: 2 (1)
Здравствуйте, oSandmaNo, Вы писали:

SN>Конкретезируем


SN>таблица A:

SN>таблица B:
SN>Делаем запрос
SN>SELECT b2,SUM(isnull(a2) FROM A,B GROUP BY b2 WHERE MONTH(a3)=1 AND b1=a1
Делаем запрос:
SELECT 
    b2, SUM(isnull(a2,0)) as a2
FROM 
    B LEFT JOIN A ON b1=a1 AND MONTH(a3)=1
GROUP BY 
    b2


SN>Получаем

b2 a2
e .0000
q 1.3000
w 3.3000

Это то, что надо?
С уважением, Дмитрий.
Re[3]: SQL запросы(NULL)
От: LantY Россия icq:56949749
Дата: 22.10.03 07:42
Оценка:
Здравствуйте, Dimka, Вы писали:

D>
D>SELECT b2,SUM( IFNULL (a2,0) ) FROM B LEFT JOIB A on b1=a1 GROUP BY b2 WHERE MONTH(a3)=1
D>


D> не могу ща проверить, по этому если не работает подумаю потом — дома

Так не сработает (по крайней мере в MS SQL 2K)
1. WHERE пройдется по всему запросу и покоцает записи
2. WHERE должно идти раньше GROUP
3. Функция называется isnull
С уважением, Дмитрий.
Re[3]: SQL запросы(NULL)
От: oSandmaNo  
Дата: 22.10.03 07:45
Оценка:
D>
D>SELECT b2,SUM( IFNULL (a2,0) ) FROM B LEFT JOIB A on b1=a1 GROUP BY b2 WHERE MONTH(a3)=1
D>


Пробовал и вот :

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

вот такая промблема!
Re[3]: SQL запросы(NULL)
От: oSandmaNo  
Дата: 22.10.03 07:49
Оценка:
LY>SELECT
LY> b2, SUM(isnull(a2,0)) as a2
LY>FROM
LY> B LEFT JOIN A ON b1=a1 AND MONTH(a3)=1
LY>GROUP BY
LY> b2
LY>[/sql]

SN>>Получаем

LY>b2 a2
LY>e .0000
LY>q 1.3000
LY>w 3.3000

LY>Это то, что надо?

У меня так не получается !!!

все равно получается
b2 a2
q 1.3000
w 3.3000
Re[4]: SQL запросы(NULL)
От: Dimka Россия  
Дата: 22.10.03 07:50
Оценка:
Здравствуйте, oSandmaNo, Вы писали:


SN>вот такая промблема!


Ну вроде бы LantY написал правельное решение
- нельзя впихать невпихуемое :)
Re[4]: SQL запросы(NULL)
От: Dimka Россия  
Дата: 22.10.03 07:52
Оценка:
Здравствуйте, oSandmaNo, Вы писали:
SN>У меня так не получается !!!

а чё за БД я никак не въеду ?
- нельзя впихать невпихуемое :)
Re[5]: SQL запросы(NULL)
От: oSandmaNo  
Дата: 22.10.03 08:14
Оценка:
Здравствуйте, Dimka, Вы писали:

D>Здравствуйте, oSandmaNo, Вы писали:

SN>>У меня так не получается !!!

D>а чё за БД я никак не въеду ? :xz:


ПРОБОВАЛ В ASSECC и VFP
Re[6]: SQL запросы(NULL)
От: LantY Россия icq:56949749
Дата: 22.10.03 08:25
Оценка:
Здравствуйте, oSandmaNo, Вы писали:

SN>Здравствуйте, Dimka, Вы писали:


D>>Здравствуйте, oSandmaNo, Вы писали:

SN>>>У меня так не получается !!!

D>>а чё за БД я никак не въеду ?


SN>ПРОБОВАЛ В ASSECC и VFP


Ну блин
Вам что, настолько лень в доках копаться???
30 сикунд на поиск в справке по слову null и:
В аксессе этот же запрос выглядит следующим образом:
SELECT b.b2, Sum(Nz([a2],0)) AS aa
FROM b LEFT JOIN a ON (b.b1 = a.a1 AND Month([a3])=1)
GROUP BY b.b2


И ВСЕ работает.
С уважением, Дмитрий.
Re: SQL запросы(NULL)
От: oSandmaNo  
Дата: 22.10.03 10:12
Оценка:
Спасибо ВСЕМ!

Вот что пулучилось в итоге:

SELECT GFirm.FirmName,
SUM(Iif(MONTH(ODate)=1,OSumm,0)) as A1,
SUM(Iif(MONTH(ODate)=2,OSumm,0)) as A2,
SUM(Iif(MONTH(ODate)=3,OSumm,0)) as A3,
SUM(Iif(MONTH(ODate)=4,OSumm,0)) as A4,
SUM(Iif(MONTH(ODate)=5,OSumm,0)) as A5,
SUM(Iif(MONTH(ODate)=6,OSumm,0)) as A6,
SUM(Iif(MONTH(ODate)=7,OSumm,0)) as A7,
SUM(Iif(MONTH(ODate)=8,OSumm,0)) as A8,
SUM(Iif(MONTH(ODate)=9,OSumm,0)) as A9,
SUM(Iif(MONTH(ODate)=10,OSumm,0)) as A10,
SUM( Iif( MONTH(ODate)=11, OSumm ,0) ) as A11,
SUM( Iif( MONTH(ODate)=12, OSumm ,0) ) as A12
FROM GFirm LEFT JOIN Operations ON Operations.firmkey=GFirm.firmkey GROUP By FirmName ORDER BY FirmName
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.