Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 сделать в одном селекте группир. и подсчёт по условию  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1034
Можно ли в одном селекте сделать групировку и подсчёт по условию, например
p1 p2

1 1
1 0
1 1

Попробовал сделать Select p1,count(p2) as p2_1,count(empty(2)) as p2_0 from x group p1
ни фига не получилось, хотелось бы видеть

p1 p2_1 p2_0
1 3 1
6 фев 08, 10:23    [5249860]     Ответить | Цитировать Сообщить модератору
 Re: сделать в одном селекте группир. и подсчёт по условию  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
CREATE CURSOR test (f1 int, f2 int)

INSERT INTO test VALUES (1,1)
INSERT INTO test VALUES (1,0)
INSERT INTO test VALUES (1,1)

SELECT SUM(IIF(f1 = 1, 1, 0)) as SumToF1, SUM(IIF(f2 = 1, 1, 0)) as SumToF2 ;
FROM test 
6 фев 08, 10:43    [5250050]     Ответить | Цитировать Сообщить модератору
 Re: сделать в одном селекте группир. и подсчёт по условию  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
create table pp (p1 i, p2 i)
insert into pp values (1, 1)
insert into pp values (1, 0)
insert into pp values (1, 1)

select t.p1, count(t.p2),  ;
	(select count(p2) from pp where empty(p2)); 
	from pp t ;
	group by t.p1
6 фев 08, 10:45    [5250070]     Ответить | Цитировать Сообщить модератору
 Re: сделать в одном селекте группир. и подсчёт по условию  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1034
спасибо..., классно второй селект ставить вместо поля...
6 фев 08, 11:36    [5250531]     Ответить | Цитировать Сообщить модератору
 Re: сделать в одном селекте группир. и подсчёт по условию  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658


"прошелмимо" <nospam@sql.ru> сообщил/сообщила в новостях следующее:
news:5250070@sql.ru...
> Автор: прошелмимо
> create table pp (p1 i, p2 i)
> insert into pp values (1, 1)
> insert into pp values (1, 0)
> insert into pp values (1, 1)

К вашему добавляем:
insert into pp values (2, 0)

insert into pp values (2, 1)

> select t.p1, count(t.p2), ;
> (select count(p2) from pp where empty(p2));
> from pp t ;
> group by t.p1


Надо:


select t.p1, count(t.p2), ;

(select count(p2) from pp pp2 WHERE pp2.p1=t.p1 AND empty(p2));

from pp t ;

group by t.p1



Хотя, мне кажется, что на больших таблицах с sum(iif()) должно работать
быстрее, т.к. запрос довольно таки простой.


Posted via ActualForum NNTP Server 1.4

6 фев 08, 12:10    [5250832]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить