Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос [Firebird 2.0]


makz ©   (2008-03-01 12:17:00) 

Есть таблица REG с полями ID, p и m (кроме прочих).  Поля p и m могут принимать значения 0 или 1. Запрос
 select case m when 0 then 'M-' else 'M+' end || case p when 0 then 'П-' else 'П+' end as CC, count(*)
 from REG
 group by m, p

выдает таблицу только для существующих в базе комбинаций значений m и p, например:

count    CC
2          M+П+
1          M+П-

а нужно всегда получать таблицу с 4мя строками:

count    CC
2          M+П+
1          M+П-
0          M-П+
0          M-П-

Как этого добится, пусть даже с ХП? Помогите пожалуйста!


makz   (2008-03-04 04:08:00) [1]

Понял, спасибо!


Johnmen   (2008-03-03 11:05:00) [2]

Вместо COUNT в [2]:
SUM(CASE WHEN GDU=41 THEN 1 ELSE 0 END) AS GDU 1


makz   (2008-03-03 10:32:00) [3]

Просто еще одно поле integer в REG, в случае если оно принимает значение 41 - результат попадает в GDU1 отчета, при значении 42 - в GDU2, в остальных случаях запись отбрасывается.


Johnmen   (2008-03-03 10:24:00) [4]


> еще один атрибут GDU

Что за атрибут и как он используется, мы должны, как обычно, догадаться сами?


makz   (2008-03-03 09:48:00) [5]

Только вот проблема - есть еще один атрибут GDU, отчет нужен в 3 колонки:

GDU1     GDU2       CC
2          3             M+П+
1          4             M+П-
0          0             M-П+
0          1             M-П-


Тут только вложенный select поможет?


makz   (2008-03-03 08:41:00) [6]

спасибо!


palva   (2008-03-01 23:36:00) [7]


select 'Ì-Ï-' CC, count(*) from table3 where m=0 and p=0
union
select 'Ì-Ï+' CC, count(*) from table3 where m=0 and p0
union
select 'Ì+Ï-' CC, count(*) from table3 where m0 and p=1
union
select 'Ì+Ï+' CC, count(*) from table3 where m0 and p0


www   (2008-03-01 22:21:00) [8]

select sum(cnt), cc from(
select count(*) as cnt, case m when 0 then 'M-' else 'M+' end || case p when 0 then 'П-' else 'П+' end as CC
from reg
group by m, p
union all
select 0, 'M+П+' from rdb$database
union all
select 0, 'M+П-' from rdb$database
union all
select 0, 'M-П+' from rdb$database
union all
select 0, 'M-П-' from rdb$database
)
group by cc


Наверх

Титульная страница Поиск, карта сайта Написать письмо