Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Сложный 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
4-1115175884
Alexandr_jr
2005-05-04 07:04
2005.06.29
CreateFileMapping&MapViewOfFile


3-1116490231
msguns
2005-05-19 12:10
2005.06.29
Как задать регистр в ACCESS


1-1118060979
tunguss
2005-06-06 16:29
2005.06.29
Этика классов и сортировка TList...


1-1117877764
Anatoly Podgoretsky
2005-06-04 13:36
2005.06.29
Занимательные наблюдения над плавающей запятой


1-1118208961
Mefodiy
2005-06-08 09:36
2005.06.29
Число строк в документе Word