Форум: "Базы";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизГруппировка данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c