Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизСложный SQL для статистики Найти похожие ветки
← →
КиТаЯц © (2005-05-12 12:05) [0]Постараюсь объяснить на примере... Есть такой запрос:
SELECT
COLL.ID_PEOPLE,
SUM (COLL.PLATA) AS SUMMA,
SUM (COLL1.PLATA) AS SUMMA1
FROM
COLL COLL1
WHERE
COLL.TIP = 1 or COLL.TIP = 2
GROUP BY COLL.ID_PEOPLE
Получается статистика по людям кто сколько заплатил по типу 1 + 2
Получается что-то вроде:
Иванов 20р 20р
Петров 10р 10р
Сидоров 15р 15р
Почему 2 поля? Чтобы задать вопрос... Далее пишу бред (бред выделен полужирным) для того чтобы получилось вопрос сформулировать...SELECT
COLL.ID_PEOPLE,
SUM (COLL.PLATA) AS SUMMA WHERE COLL.TIP = 1,
SUM (COLL1.PLATA) AS SUMMA1 WHERE COLL.TIP = 2
FROM
COLL COLL1
WHERE
...
GROUP BY COLL.ID_PEOPLE
Вопрос: как составить запрос чтобы в результате получилось:
Иванов 7р 13р
Петров 4р 6р
Сидоров 15р 0р
← →
Johnmen © (2005-05-12 12:10) [1]
SELECT
T.ID_PEOPLE,
(SELECT SUM (T1.PLATA) FROM COLL T1
WHERE (T.ID_PEOPLE=T1.ID_PEOPLE) AND (T1.TIP = 1)) AS SUMMA,
(SELECT SUM (T2.PLATA) FROM COLL T2
WHERE (T.ID_PEOPLE=T2.ID_PEOPLE) AND (T2.TIP = 2)) AS SUMMA,
FROM COLL T
WHERE
...
GROUP BY T.ID_PEOPLE
Но если TIP вполне определен, то можно проще...
← →
msguns © (2005-05-12 12:13) [2]Для таких вещей лучше ХП ИМХО
← →
Johnmen © (2005-05-12 12:18) [3]Кстати, у автора же FB. Тогда проще
SELECT
T.ID_PEOPLE,
SUM (CASE WHEN T.TIP = 1 THEN T.PLATA ELSE 0 END),
SUM (CASE WHEN T.TIP = 2 THEN T.PLATA ELSE 0 END),
FROM COLL T
WHERE
...
GROUP BY T.ID_PEOPLE
← →
КиТаЯц © (2005-05-12 12:28) [4]Хм... Вроде логика запроса понятна. Но...
В первом случае EMS QuickDesk виснет напроч, а во втором ругается:
SQLEditorForm.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 11.
Может FireBird 1.0 ???
← →
Johnmen © (2005-05-12 12:36) [5]>виснет напроч
Сколько записей в тбл ? Есть ли индексы ?
>Может FireBird 1.0 ???
Может...
← →
Sergey13 © (2005-05-12 12:46) [6]2 [4] КиТаЯц © (12.05.05 12:28)
>В первом случае EMS QuickDesk виснет напроч
там Group By вроде лишний. Нет?
← →
КиТаЯц © (2005-05-12 13:10) [7]> Johnmen © (12.05.05 12:36) [5]
Да. FireBird 1.5 прожевал :) В общем куда дальше думать понятно. Спасибо.
> Sergey13 © (12.05.05 12:46) [6]
Вроде не... Разберусь. Спасибо.
← →
Fiend © (2005-05-12 15:54) [8]А можно еще проще и быстрее по времени
← →
КиТаЯц © (2005-05-13 07:25) [9]Я так понял, что
GROUP BY + ORDER BY
в FireBird 1.5 уже не работают? Что делать?
Я выкрутился через вьюшку (во вьюшке GROUP BY, а в tIBQuery - ORDER BY). Есть способ лучше?
Спасибо.
← →
sniknik © (2005-05-13 08:56) [10]> Я так понял, что GROUP BY + ORDER BY в FireBird 1.5 уже не работают?
с чего бы? при развитии обычно добавляют возможности а не урезают их
возможно дело в коде (которого кстати не вижу чегото)?
возможно даже вот это поможет ORDER BY 1
← →
КиТаЯц © (2005-05-13 09:12) [11]> sniknik © (13.05.05 08:56) [10]
Ёх! Все гениальное просто! :) Спасибо.
ORDER BY +НОМЕР ПОЛЯ работает!
← →
Johnmen © (2005-05-13 09:25) [12]>ORDER BY +НОМЕР ПОЛЯ работает!
А чего бы ему не работать, если это стандарт. Базовый стандарт 1989 года. :)))
← →
КиТаЯц © (2005-05-13 09:35) [13]> Johnmen © (13.05.05 09:25) [12]
Дассс... :) Дыры в образовании. Пиво пить меньше надо было. :)))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c