Я сталкиваюсь с проблемой, которая иногда возникает, когда вы имеете дело с не полностью нормализованной таблицей. Здесь проблема. Представьте себе таблицу с 4 столбцами, и давайте назовем эту таблицу dbo.Hierarchical. Вот определение таблицы:
if OBJECT_ID('dbo.Hierarchical') is not null
drop table dbo.Hierarchical
create table dbo.Hierarchical
(
colID int not null identity(1,1) primary key
,GroupName varchar(5) not null
,IsAtomic bit not null
,Constituent varchar(5) null
)
Эта таблица может иметь GroupName, то есть Atomic, что означает, что она не имеет компонента или не может быть Atomic. В этом случае GroupName может содержать другие GroupNames.
Для наглядности заполните таблицу некоторыми данными.
set nocount on
insert into dbo.Hierarchical values ('A',0,'B')
insert into dbo.Hierarchical values ('A',0,'C')
insert into dbo.Hierarchical values ('B',1,'B')
insert into dbo.Hierarchical values ('C',0,'K')
insert into dbo.Hierarchical values ('C',0,'L')
insert into dbo.Hierarchical values ('D',0,'E')
insert into dbo.Hierarchical values ('D',0,'F')
insert into dbo.Hierarchical values ('D',0,'G')
insert into dbo.Hierarchical values ('E',1,'E')
insert into dbo.Hierarchical values ('F',1,'F')
insert into dbo.Hierarchical values ('G',0,'H')
insert into dbo.Hierarchical values ('G',0,'I')
insert into dbo.Hierarchical values ('H',1,'H')
insert into dbo.Hierarchical values ('I',1,'I')
insert into dbo.Hierarchical values ('J',1,'J')
insert into dbo.Hierarchical values ('K',1,'K')
insert into dbo.Hierarchical values ('L',1,'L')
insert into dbo.Hierarchical values ('M',1,'M')
insert into dbo.Hierarchical values ('N',1,'N')
set nocount off
Теперь, если мы посмотрим на простой выбор * из dbo.Hierarchical, мы получим следующее:
GroupName colID IsAtomic Constituent
A 1 0 B
A 2 0 C
B 3 1 B
C 4 0 K
C 5 0 L
D 6 0 E
D 7 0 F
D 8 0 G
E 9 1 E
F 10 1 F
G 11 0 H
G 12 0 I
H 13 1 H
I 14 1 I
J 15 1 J
K 16 1 K
L 17 1 L
M 18 1 M
N 19 1 N
Уфф, это было долго наматываться. Теперь обратите внимание, что первые две строки имеют GroupName A и Contiuents B и C. B является атомарным, поэтому у него нет дополнительных компонентов. C, однако, имеет константы K, L (K и L являются атомными). Как я могу создать представление, которое сгладит эту таблицу, чтобы я мог видеть только GroupName и Atomic Contiuents. В случае GroupName A я должен увидеть 3 строки
A B
A K
A L