![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменить SQL запрос, что бы и пустые записи тоже были? [D7, MSSQL]
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]
> И не надо так нервничать.
та я спокоен :)
пусть мучается...