Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вариации на тему GROUP BY - не могу сообразить. / 2 сообщений из 2, страница 1 из 1
05.10.2007, 13:10
    #34849583
Amdei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вариации на тему GROUP BY - не могу сообразить.
Граждане, чиркните плз пару строк, а то мозг заклинило:
Задача: Есть таблички A и B, связь один-ко-многим. У B есть некий атрибут K.
Хочется одним запросом (без процедур), если такое можно, выбрать все атрибуты А, количество относящихся к этому А записей из B и количество относящихся к этому А записей из B с определенным значением K={чего хочу = 1}.

Скрипты создания:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
/*==============================================================*/
/* DBMS name:      Microsoft SQL Server 2000                    */
/*==============================================================*/


alter table EB
   drop constraint FK_EB_CONTAINS_EA
go

if exists (select  1 
            from  sysindexes
           where  id    = object_id('EB')
            and   name  = 'Contains_FK'
            and   indid >  0 
            and   indid <  255 )
   drop index EB.Contains_FK
go

if exists (select  1 
            from  sysobjects
           where  id = object_id('EA')
            and   type = 'U')
   drop table EA
go

if exists (select  1 
            from  sysobjects
           where  id = object_id('EB')
            and   type = 'U')
   drop table EB
go

/*==============================================================*/
/* Table: EA                                                    */
/*==============================================================*/
create table EA (
   ID                   int                  not null,
   Name                 varchar( 12 )          not null,
   CreationDate         datetime             not null,
   constraint PK_EA primary key nonclustered (ID)
)
go

/*==============================================================*/
/* Table: EB                                                    */
/*==============================================================*/
create table EB (
   EA_ID                int                  not null,
   SheduledDate         datetime             not null,
   Result               int                  not null
      constraint CKC_RESULT_EB check (Result in ( 0 , 1 , 2 ))
)
go

/*==============================================================*/
/* Index: Contains_FK                                           */
/*==============================================================*/
create index Contains_FK on EB (
EA_ID ASC
)
go

alter table EB
   add constraint FK_EB_CONTAINS_EA foreign key (EA_ID)
      references EA (ID)
go

Тестовые данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
insert into EA (ID, Name, CreationDate) values ( 1 , 'Name1', '1-1-1 0:0:0')
go
insert into EA (ID, Name, CreationDate) values ( 2 , ' Name2', '1-1-1 0:0:2')
go
insert into EA (ID, Name, CreationDate) values ( 3 , 'Name3', '1-1-1 0:0:0')
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:5',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:16',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:9',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:17',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:19',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:6',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:3',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:13',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:2',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:11',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:0',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:9',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:7',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:1',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:15',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:4',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:17',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:12',  2 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 1 , '1-1-1 0:0:10',  1 )
go
insert into EB (EA_ID, SheduledDate, Result) values ( 2 , '1-1-1 0:0:2',  2 )
go


Как это сделать?
Получив примерно такую выборку:
Код: plaintext
1.
2.
3.
 1 , 'Name1', '1-1-1 0:0:0',  10 ,  7 
 2 , ' Name2', '1-1-1 0:0:2',  10 ,  3 
 3 , 'Name3', '1-1-1 0:0:0',  0 ,  0 
...
Рейтинг: 0 / 0
05.10.2007, 13:12
    #34849592
Amdei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вариации на тему GROUP BY - не могу сообразить.
Тфу блин, форумом ошибся! :(
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вариации на тему GROUP BY - не могу сообразить. / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]