Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить SQL запрос, что бы и пустые записи тоже были? [D7, MSSQL]


Страницы:   1 2

Draught ©   (2004-05-26 14:36:00) 

есть SQL запрос:

select HOTEL, count(NUMBER) from number
where FINDATE>'26.05.2004'
GROUP BY HOTEL

получается таблица
HOTEL | COUNT OF NUMBER
1     | 5
3     | 10

далее эти данные загоняются в график

вроде все понятно, но вот столкнулся с ситуацией, когда полю HOTEL соответствует 0 записей, соответственно это не отображается, а хотелось бы, т.е. что бы было так
HOTEL | COUNT OF NUMBER
1     | 5
3     | 10
5     | 0


Draught   (2004-05-27 08:07:00) [1]

2Sandman25+1, спасиб огромное, этот запрос хорошо работает и возвращает все как положено... немного переделал его под свои таблички:

select hotel.id_HOTEL, count(number.number)
from hotel left join number on hotel.id_hotel=number.hotel
and number.FINDATE>'26.05.2004'
GROUP BY hotel.id_hotel


Sandman25+1   (2004-05-26 17:47:00) [2]

Ох уж этот BDE с его ограничениями...
Вот, вроде работает.

select hotel.HOTEL, count(number.number)
from hotel left join number on hotel.hotel=number.hotel
and mydate>'26.05.2004'
GROUP BY hotel.hotel


Draught   (2004-05-26 17:42:00) [3]

я могу кинуть таблички если надо...


Sandman25+1   (2004-05-26 17:40:00) [4]

[34] Draught ©   (26.05.04 17:36)

Очень странно. [29] Sandman25+1   (26.05.04 17:22) должен был работать. Я попробую сделать тестовые таблички...


Draught   (2004-05-26 17:36:00) [5]

Sandman25+1 да, это есть результат для таблицы заполненой в соответствии с [28] только в [28] отображена не вся таблица, т.е. не все записи и не отображено поле FINDATE, о нем я уже писал, оно либо пустое, либо содержит дату.

Там для HOTEL=1всего 2поля FINDATEудовлетворяют условию FINDATE>'26.05.2004'для остальных вообще не удовлетворяют, и для HOTEL=5всего 1 запись? удовлетворяющая условию FINDATE>'26.05.2004'

более конкретный пример:
HOTEL|NUMBER|FINDATE
1 1 28.05.2004
1 2 24.05.2004
1 3
1 4
1 5 29.05.2004
...
3 66
3 67
3 68
3 69 23.05.2004
3 70
3 71
4 1
4 2
...
5 1 25.06.2004
5 2
5 3


Sandman25+1   (2004-05-26 17:30:00) [6]

[31] Draught ©   (26.05.04 17:27)

Это результаты для таблицы, заполненной в соответствии с [28]?


Draught   (2004-05-26 17:28:00) [7]

а хотелось бы получить результат
hotel | f
1 2
2 0
3 0
4 0
5 1

сорри за флуд!!!


Draught   (2004-05-26 17:27:00) [8]

Sandman25+1
для примера, первый запрос возвращал результат для тех же полей
hotel|f
1 2
5 1


Draught   (2004-05-26 17:25:00) [9]

2Sandman25+1

результат:

hotel | f
1 0
2 0
3 0
4 0
5 0


Sandman25+1   (2004-05-26 17:22:00) [10]

Повторяю.

select h.hotel, (select count(*) from number where number.hotel=h.hotel
and number.FINDATE>'26.05.2004')
from hotel h


Draught   (2004-05-26 17:21:00) [11]

Соловьев, в каком смысле проблема тут???
FINDATE - поле, дата окончания
в таблице NUMBER есть поля
HOTEL
NUMBER
FINDATE
эта таблица точно содержит заполнеными поля HOTEL и NUMBER поле HOTEL можно выбирать как из таблицы HOTEL, так и из таблицы NUMBER - значения это не имеет, SQL запрос возвращает одинаковые результаты

пример таблицы NUMBER:

HOTEL|NUMBER
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
3 66
3 67
3 68
3 69
3 70
3 71
4 1
4 2
4 3
4 4
4 5
4 6

так же есть поле FINDATE - в котором значение по умолчанию null, т.е. оно пустое, но некоторые поля содержат дату, и нужно узнать количество записей дата в которых больше заданной


Соловьев   (2004-05-26 17:15:00) [12]


> number.FINDATE>'26.05.2004'

значит проблема тут


Sandman25+1   (2004-05-26 17:07:00) [13]

или

select h.hotel, (select count(*) from number where number.hotel=h.hotel
and number.FINDATE>'26.05.2004')
from hotel h


Draught   (2004-05-26 17:06:00) [14]

тоже самое, одни нули в результате
hotel все есть, но вот значения у них у всех 0


Соловьев   (2004-05-26 17:04:00) [15]

select h.hotel, (select count(number) from number where number.hotel=h.hotel
and number.FINDATE>'26.05.2004')
from hotel h


Draught   (2004-05-26 17:01:00) [16]

FINDATE относится к таблице NUMBER

вариант который показал Sandman25+1 вроде работает, но все результаты - 0


Draught   (2004-05-26 17:00:00) [17]

FINDATE относится к таблице NUMBER

вариант который показал Sandman25+1 вроде работает, но все результаты - 0


Соловьев   (2004-05-26 16:57:00) [18]


> [20] Draught ©   (26.05.04 16:55)

h - псевдоним таблицы HOTEL, т.е. ссылка на нее


> да и к тому же в таком варианте поле FINDATE будет неизвестным

к какой таблице оно относится?


Draught   (2004-05-26 16:55:00) [19]

2Соловьев

если можно, то немного расписать, немного непонятно что такое h

да и к тому же в таком варианте поле FINDATEбудет неизвестным


Соловьев   (2004-05-26 16:53:00) [20]


> И не надо так нервничать.

та я спокоен :)
пусть мучается...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо