Признак группы

Первый раз
Дата: 14.01.2009 11:41:17
Как можно написать запрос, чтобы вывести признак группы is_group (0 - не группа, 1 - группа):
Результат должен быть примерно таким:
code      is_group
1           1
1.1         1
1.1.1       0
1.1.2       0
2.          1
2.1         0
2.2.        0
3           1
3.1         1
3.1.1       1
3.1.1.1     0
и т.д.
Glory
Дата: 14.01.2009 11:42:21
И на основании чего вы предлагаете вычислять этот признак ?
Гавриленко Сергей Алексеевич
Дата: 14.01.2009 11:44:14
select
  Code
  , case when exists( select * from [Тбл] x where x.code like a.code + '%' and x.code <> a.code) then 1 else 0 end
from [Тбл] a
Первый раз
Дата: 14.01.2009 11:44:36
Если иерархия есть по коду, например, у 1 есть 1.1, значит 1 - это группа и т.д.,если у 1.1.1 нет дальнейшей иерархии, то это не группа.
Первый раз
Дата: 14.01.2009 11:46:52
Спасибо, Сергей Алексеевич!!! То, что нужно!!!
iap
Дата: 14.01.2009 11:52:14
Гавриленко Сергей Алексеевич
select
  Code
  , case when exists( select * from [Тбл] x where x.code like a.code + '%' and x.code <> a.code) then 1 else 0 end
from [Тбл] a
Правильнее, наверно, не '%', а '_' ? Тогда и x.code <> a.code становится лишним
select
  Code
  , case when exists( select * from [Тбл] x where x.code like a.code + '_') then 1 else 0 end
from [Тбл] a
iap
Дата: 14.01.2009 12:03:34
iap
Гавриленко Сергей Алексеевич
select
  Code
  , case when exists( select * from [Тбл] x where x.code like a.code + '%' and x.code <> a.code) then 1 else 0 end
from [Тбл] a
Правильнее, наверно, не '%', а '_' ? Тогда и x.code <> a.code становится лишним
select
  Code
  , case when exists( select * from [Тбл] x where x.code like a.code + '_') then 1 else 0 end
from [Тбл] a
Простите за оверквотинг...
select Code, isnull((select 1 from [Тбл] x where x.code like a.code + '_'),0) from [Тбл] a
iap
Дата: 14.01.2009 12:05:08
Слегка ошибся:
select Code, isnull((select top 1 1 from [Тбл] x where x.code like a.code + '_'),0) from [Тбл] a
Первый раз
Дата: 14.01.2009 12:14:58
Второй вариант, к сожалению, не работает (неверно определяет группы).
Еще в догонку, можно ли в этом же запросе вывести третью колонку с указанием кода группы только для тех элементов, которые не являются группой???
iap
Дата: 14.01.2009 12:26:15
Первый раз
Второй вариант, к сожалению, не работает (неверно определяет группы).
Еще в догонку, можно ли в этом же запросе вывести третью колонку с указанием кода группы только для тех элементов, которые не являются группой???
Кстати, и вариант Гавриленко тоже не будет работать правильно, если будут строки '1.1' и '1.11', например. Наверно, для групп должны существовать записи, у которых после code группы идёт точка и хотя бы один символ:
select Code, isnull((select top 1 1 from [Тбл] x where x.code like a.code + '._%'),0) from [Тбл] a