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

Вниз

Группировка данных   Найти похожие ветки 

 
Dush   (2003-09-01 10:43) [0]

Имеется структура таблицы:
Propusk
Id_Propusk
ID_Stud
Prichina (либо 0 либо 1)
...
Возможно ли сделать групировку данных так чтобы в результирующем НД каждая запись представлялась бы так:
ID_Stud Prichina_0 Prichina_1

(в столбце Prichina_0 - количество записей со значением Prichina=0; в столбце Prichina_1 - количество записей со значением Prichina=1)


 
HSolo ©   (2003-09-01 10:49) [1]

select t.id_stud,
(select count(to.prichina) from propusk t0
where t0.id_stud = t.id_stud
and t0.prichina = 0),
(select count(to.prichina) from propusk t1
where t1.id_stud = t.id_stud
and t1.prichina = 1)
from prichina t


 
Zacho ©   (2003-09-01 10:51) [2]

Можно. Например, так:
SELECT P.ID_STUD, (SELECT COUNT(P1.PRICHINA) FROM PROPUSK P1 WHERE P1.ID_STUD=P.ID_STUD AND P1.PRICHINA=0 ) AS PRICHINA_0, (SELECT COUNT(P2.PRICHINA) FROM PROPUSK P2 WHERE P2.ID_STUD=P.ID_STUD AND P1.PRICHINA=1) AS PRICHINA_1 FROM PROPUSK P


 
stone ©   (2003-09-01 10:53) [3]

вероятно здесь потребуются вложенные запросы:

select t.ID_Stud, (select count(*) from Propusk where ID_Stud = t.ID_Stud and Prichina=0) as Prichina_0, (select count(*) from Propusk where ID_Stud = t.ID_Stud and Prichina=1) as Prichina_1 from Propusk t GROUP BY t.ID_Stud


 
Dush   (2003-09-01 10:59) [4]

Спасибо


 
asp ©   (2003-09-01 11:00) [5]

SELECT T.ID_STUD, COUNT(T0.PRICHINA) AS PRICHINA_0, COUNT(T1.PRICHINA) AS PRICHINA_1
FROM TABLE T
LEFT OUTER JOIN TABLE T0 ON (T0.ID_PROPUSK = T.ID_PROPUSK AND T0.PRICHINA = 0)
LEFT OUTER JOIN TABLE T1 ON (T1.ID_PROPUSK = T.ID_PROPUSK AND T1.PRICHINA = 1)
GROUP BY T.ID_STUD


 
Соловьев ©   (2003-09-01 11:01) [6]

можно и хранимой процедурой.

for
select id_student
from table
into :id_s
do
begin
select count(*)
from table
where is_student = id_s and id_prichina = 0
into :id_p0;

select count(*)
from table
where is_student = id_s and id_prichina = 1
into :id_p1;

suspend;
end
...


 
Dush   (2003-09-01 14:56) [7]

И снова здравствуйте! Проблема вот в чем - сделал запрос такого вида:
SELECT Propusk.ID_Stud, (select count(*) from Propusk where Propusk.ID_Stud = Stud.ID_Stud and Propusk.Prichina="Уважительная") as Prichina_0, (select count(*) from Propusk where Propusk.ID_Stud = Stud.ID_Stud and Propusk.Prichina="Не уважительная") as Prichina_1,
FROM STUD Stud
INNER JOIN PROPUSK Propusk
ON (Propusk.ID_STUD = Stud.ID_STUD)
where Propusk.id_stud in (Select Stud.ID_STUD from Stud where stud.ID_Group=(select Groups.ID_Group from GROUPS Groups where Groups.Name=:GroupName))
GROUP BY Propusk.ID_Stud

Все хорошо работает.
765 1 3
768 2 0
...

А теперь хочу вместо номера студента (ID_Stud) в гриде выводить фамилию. для этого добавляю после Propusk.ID_Stud -Stud.Familiya. При попытке выполнить запрос выдает ошибку:"invalid column references"! C чем это связано?


 
HSolo ©   (2003-09-01 14:59) [8]

Вы не забыли добавить Stud.Familiya в Group by ?


 
Dush   (2003-09-01 15:02) [9]

2 HSolo ©
не помогает :(


 
Zacho ©   (2003-09-01 15:04) [10]

Значит, в таблице STUD нет поля FAMILIYA


 
Dush   (2003-09-01 15:22) [11]

2 Zacho ©
Есть там такое поле, есть!!!


 
HSolo ©   (2003-09-01 16:03) [12]

Давайте полный текст ругающегося запроса.
А, кстати, вот это:
... where Propusk.id_stud in (Select ...
не тормозит? Может, лучше join?


 
Dush   (2003-09-01 16:35) [13]

2 HSolo ©
Вот он код!
SELECT Stud.Familiya, Stud.ID_Stud, (select count(*) from Propusk where Propusk.ID_Stud = Stud.ID_Stud and Propusk.Prichina="Уважительная") as Prichina_0, (select count(*) from Propusk where Propusk.ID_Stud = Stud.ID_Stud and Propusk.Prichina="Не уважительная") as Prichina_1, Propusk.ID_Stud
FROM STUD Stud
INNER JOIN PROPUSK Propusk
ON (Propusk.ID_STUD = Stud.ID_STUD)
where Propusk.id_stud in (Select Stud.ID_STUD from Stud where stud.ID_Group=(select Groups.ID_Group from GROUPS Groups where Groups.Name=:GroupName))
GROUP BY Stud.Familiya, Propusk.ID_Stud


Вот структура таблиц:
Groups Stud Propusk
ID_Group ID_Stud ID_Propusk
Name ID_Group ID_Stud
Familiya Prichina
..... .......


 
HSolo ©   (2003-09-01 17:27) [14]

1. В Group by пропущено поле Stud.ID_Stud
2. А зачем вообще его выводить, если есть Propusk.ID_Stud?


 
Dush   (2003-09-01 19:23) [15]

2 HSolo ©
1. Получилось :))))) Спасибо большое.
2. Ну в гриде же не будешь показывать для декана факультета номера студентов в базе.


 
HSolo ©   (2003-09-02 08:55) [16]

Естественно, не будешь :)) Только Вы номер студента, по-моему, дважды выводите: Stud.ID_Stud и Propusk.ID_Stud. Оно, конечно, мелочь - но зачем?


 
Dush   (2003-09-02 09:58) [17]

2 HSolo ©
мда, действительно :)))
Как говорилось в одном фильме: "Я не подумал..." :)))
Спасибо большое, а то проект уже надо было сдать, а я как обычно все в последний день :(



Страницы: 1 вся ветка

Текущий архив: 2003.09.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
4-72006
mm0
2003-07-19 05:50
2003.09.22
Цвет в RICHEDIT


3-71538
Abikos
2003-08-29 12:20
2003.09.22
пользователи в Interbase


1-71581
V.exeR
2003-09-10 04:13
2003.09.22
Drag&Drop в TTreeView


7-71976
Ionv
2003-07-04 07:42
2003.09.22
Как работать с АЦП(портами) в WinXP?


1-71615
СержК
2003-09-09 14:00
2003.09.22
Как сохранить Quick Report