powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите запрос
15 сообщений из 15, страница 1 из 1
Подскажите запрос
    #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
Подскажите запрос
    #32328387
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это делается через ХП или двумя разными запросами
...
Рейтинг: 0 / 0
Подскажите запрос
    #32328487
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой сервер используется ?

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Подскажите запрос
    #32328518
Фотография фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IB 6.5
...
Рейтинг: 0 / 0
Подскажите запрос
    #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
Подскажите запрос
    #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
Подскажите запрос
    #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
Подскажите запрос
    #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
Подскажите запрос
    #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
Подскажите запрос
    #32329329
Гость__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХОТИМ!
...
Рейтинг: 0 / 0
Подскажите запрос
    #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
Подскажите запрос
    #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
Подскажите запрос
    #32329353
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что первая строка должна была получитьядругой
1 | 2 | 2,000| 2 |2,000 ---------> 1 | 2 | 2,000| 2 |3,000

Или я не прав?

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


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