Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.013 c
1-71650
AVK2
2003-09-06 04:04
2003.09.22
2 варианта прерывания вложенного цикла. Какой правильнее?


4-72007
Alexey.FromKiev.Ask
2003-07-21 17:38
2003.09.22
Readfile и буфер


1-71669
Пубертанец
2003-09-11 15:04
2003.09.22
QReport - как программно сохранять и загружать его в Preview?


3-71509
Eagle Owl
2003-08-30 00:28
2003.09.22
Добавление поля к таблице


3-71505
Zheks
2003-09-01 11:12
2003.09.22
Поля соответствия





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский