Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите запрос / 15 сообщений из 15, страница 1 из 1
19.11.2003, 11:10
    #32328313
фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Есть таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE RUSSIA (
    ID                  INTEGER NOT NULL,
    FROM_TO        BOOL,
    BAG_DATE       DATE,
    BAG_NUMB      INTEGER,
    DESTINATION  INTEGER,
    BAG_WEIGHT   FLOAT,
    TARA             VARCHAR( 4 ) CHARACTER SET WIN1251 COLLATE PXW_CYRL
);

Нужно написать запрос, который возвращает след. данные:
1 столбец - все значения поля "DESTINATION" (города)
2 - COUNT(записей, у которых TARA IS NULL)
3 - SUM(по полю BAG_WEIGHT для записей, у которых TARA IS NULL)
4 - COUNT(записей, у которых TARA NOT NULL)
5 - SUM(по полю BAG_WEIGHT для записей, у которых TARA NOT NULL)
...
Рейтинг: 0 / 0
19.11.2003, 11:45
    #32328387
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Это делается через ХП или двумя разными запросами
...
Рейтинг: 0 / 0
19.11.2003, 12:21
    #32328487
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
А какой сервер используется ?

Best regards,
Dnico.
...
Рейтинг: 0 / 0
19.11.2003, 12:31
    #32328518
фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
IB 6.5
...
Рейтинг: 0 / 0
19.11.2003, 17:14
    #32329155
фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Я тут поменял немного
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE RUSSIA (
    ID           INTEGER NOT NULL,
    FROM_TO      BOOL,
    BAG_DATE     DATE,
    BAG_NUMB     INTEGER,
    DESTINATION  INTEGER,
    BAG_WEIGHT   FLOAT,
    TARA         INTEGER
);

Нужно написать запрос, который возвращает след. данные:
1 столбец - все значения поля "DESTINATION" (города)
2 - COUNT(записей, у которых TARA=1)
3 - SUM(по полю BAG_WEIGHT для записей, у которых TARA=1)
4 - COUNT(записей, у которых TARA=4)
5 - SUM(по полю BAG_WEIGHT для записей, у которых TARA=4)
...
Рейтинг: 0 / 0
19.11.2003, 17:17
    #32329163
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Т.е. нужен список городов и по каждому городу

2 - COUNT(записей, у которых TARA=1)
3 - SUM(по полю BAG_WEIGHT для записей, у которых TARA=1)
4 - COUNT(записей, у которых TARA=4)
5 - SUM(по полю BAG_WEIGHT для записей, у которых TARA=4)


Best regards,
Dnico.
...
Рейтинг: 0 / 0
19.11.2003, 17:39
    #32329213
фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
1) В принципе, да.

2) Просто "DESTINATION" - FK на ID таблицы
Код: plaintext
1.
2.
3.
4.
CREATE TABLE TOWNS (
    ID                     INTEGER NOT NULL,
    NAME                VARCHAR( 100 ) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
    DELIVERY_TYPE  INTEGER
);

А здесь "DELIVERY_TYPE" - FK на ID таблицы
Код: plaintext
1.
2.
3.
CREATE TABLE DELIVERY_TYPES (
    ID               INTEGER NOT NULL,
    TYPE_NAME  VARCHAR( 100 ) CHARACTER SET WIN1251 COLLATE PXW_CYRL
);

И собственно 1 столбец получаемого запроса - все значения поля "TYPE_NAME", но думаю если решить зад.1, решение зад.2 из нее получить не трудно.
...
Рейтинг: 0 / 0
19.11.2003, 18:13
    #32329262
Гость___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Если не писать ХП - то можно так:

select R.DESTINATION, count(R.DESTINATION), SUM(R.BAG_WEIGHT),
(select count(R.DESTINATION) from RUSSIA where RUSSIA.TARA=4 and R.destination=russia.destination),
(select sum(R.BAG_WEIGHT) from RUSSIA where RUSSIA.TARA=4 and R.destination=russia.destination)
from RUSSIA R
where R.TARA=1
group by R.DESTINATION, R.BAG_WEIGHT

!!! НО ЭТО, честно говоря - ИЗВРАЩЕНИЕ!
...
Рейтинг: 0 / 0
19.11.2003, 18:32
    #32329289
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
:Если не писать ХП - то можно так:

мне кажется, что если есть такие города, для которых строк с тара=1 не существует, но существуют строки с тара=4, такой запрос, как Вы предложили, не будет корректным.

А в случае, если если значения тара in (1, 4 .... n) - это вообще не выход.

Необходимо делать так:
SELECT
RUSSIA.DESTINATION
, RUSSIA.TARA
, COUNT(*)
, SUM(RUSSIA.BAG_WEIGHT)
FROM
RUSSIA
WHERE
RUSSIA.TARA in (1,4)
GROUP BY
RUSSIA.DESTINATION
, RUSSIA.TARA

или так:

SELECT
DT.TYPE_NAME
, RUSSIA.TARA
, COUNT(*)
, SUM(RUSSIA.BAG_WEIGHT)
FROM
RUSSIA RUSSIA
, TOWNS T
, DELIVERY_TYPES DT
WHERE
RUSSIA.TARA in (1,4)
AND RUSSIA.DESTINATION = T.ID
AND T.DELIVERY_TYPE = DT.ID
GROUP BY
DT.TYPE_NAME
, RUSSIA.TARA

Вообще-то подобное именование ссылочных значений не является хорошим тоном, если хотите - дам совет.
...
Рейтинг: 0 / 0
19.11.2003, 18:57
    #32329329
Гость__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
ХОТИМ!
...
Рейтинг: 0 / 0
19.11.2003, 19:08
    #32329345
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
из опыта нашей команды:

в таблице первым идет искуственный ключ(ИК), название ИК совпадает с именем таблицы, также обычно создается генератор с именем 'GEN_'+ИК

поля, представляющие собой ссылочные значения, также называются, как ИК

Например:
CREATE TABLE RUSSIA
( RUSSIA INTEGER NOT NULL
, ...
, DESTINATION INTEGER)

CREATE TABLE DESTINATION
( DESTINATION INTEGER NOT NULL
, ...
, DELIVERY_TYPE INTEGER)

CREATE TABLE DELIVERY_TYPE
( DELIVERY_TYPE INTEGER NOT NULL
, ...)

Если в команде придерживаются определенной дисциплины именования объектов БД, это экономит массу нервной энергии, более того некоторые CASE также способны строить связи между таблицами, исходя только из именования полей.

Есть ещё приемы...
...
Рейтинг: 0 / 0
19.11.2003, 19:08
    #32329346
Гость___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
????? Странно
Есть таблица
автор писал:
ID | FROM_TO | BAG_DATE | BAG_NUMB | DESTINATION | BAG_WEIGHT | TARA

1 | 1 19.11.2003 | 1 | 1 | 1,000 | 1
2 | 1 19.11.2003 | 1 | 1 | 1,000 | 2
3 | 1 19.11.2003 | 1 | 1 | 1,000 | 1
4 | 1 19.11.2003 | 1 | 2 | 1,000 | 1
5 | 1 19.11.2003 | 1 | 2 | 1,000 | 2
6 | 1 19.11.2003 | 1 | 1 | 2,000 | 4
7 | 1 19.11.2003 | 1 | 1 | 1,000 | 4

выполнил свой некоректный запрос..Получил -
автор писал:
DESTINATION | COUNT | SUM | F_1 | F_2 |
1 | 2 | 2,000| 2 |2,000
2 | 1 | 1,000| 0 |NULL

Кто как прокоментирует?!
...
Рейтинг: 0 / 0
19.11.2003, 19:16
    #32329353
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
Мне кажется, что первая строка должна была получитьядругой
1 | 2 | 2,000| 2 |2,000 ---------> 1 | 2 | 2,000| 2 |3,000

Или я не прав?

И какие вы хотели услышать комментарии
...
Рейтинг: 0 / 0
19.11.2003, 19:31
    #32329367
Гость___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
??? может уже время познее :)) заработался ?!.....
почему же 3 а не 2?!:
последнее поле:
SUM(по полю BAG_WEIGHT для записей, у которых TARA=4)
...
а в приведенной мною вариатне TARA=4 - всего навсего у 2-ух последних записей и у DESTINATION ="1" ???? блин...:(((
...
Рейтинг: 0 / 0
20.11.2003, 10:30
    #32329730
фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите запрос
В принципе я задачу решил, но возникли вопросы плана "Как улучшить?"
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите запрос / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]