Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Фильтр на основе LIKE форматирования?  [new]
2king2
Member

Откуда:
Сообщений: 545
Входные данные: 400, 123, 654, 999, 100
• если 1, 2 разряды не нулевые, а последний 0, то родительским следует считать тот, у которого 1 разряд совпадает с данным кода, а 2, 3 разряды равны 0;
• если 1, 2, 3 разряды не нулевые, то родительским следует считать тот, у которого 1, 2 разряд совпадает с данным, а третий равен 0;
• если 1, 2 разряды нулевые, то Родительское отсутствует, поле при этом не заполняется.

Как бы красивей можно сделать?
+ Мой корявый скрипт
if ''' + @DictName + ''' = ''KOSGU''
	update Ref_KOSGUCode set
	  IsGroup = s.IsGroup,
	  ParentCode = s.ParentCode
	from p_Ref_DictionaryUpdate t (nolock)
	  inner join Ref_KOSGUCode bk (nolock) on t.Codenum = bk.Code
	  inner join (
	    select left(isnull(c.Code, ''000''), 1) + ''00'' as Code,
	      1 as IsGroup, null as ParentCode
	    from  Ref_KOSGUCode c (nolock)
		
	    where isnull(c.Code, ''000'') <> ''000''
	    union all
	    select left(isnull(c.Code, ''000''), 2) + ''0'' as Code,
	      1 as IsGroup, left(isnull(c.Code, ''000''), 1) + ''00'' as ParentCode
	    from  Ref_KOSGUCode c (nolock)
	    where right(isnull(c.Code, ''000''), 2) <> ''00''
	    union all
	    select isnull(c.Code, ''000'') as Code,
	      0 as IsGroup, left(isnull(c.Code, ''000''), 2) + ''0'' as ParentCode
	    from  Ref_KOSGUCode c (nolock)
	    where right(isnull(c.Code, ''000''), 1) <> ''0''
	  ) s on bk.Code = s.Code
	where t.UserGuid = ''' + cast(@guid as varchar(50)) + '''
	  and isnull(t.Codenum, '''') <> ''''
	  and isnull(t.ExtField1, '''') <> ''Bad''
		}
11 мар 13, 19:05    [14037086]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр на основе LIKE форматирования?  [new]
-2-
Member

Откуда:
Сообщений: 15330
2king2
Как бы красивей можно сделать?
красивей можно сделать только на оракле.
11 мар 13, 19:16    [14037110]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр на основе LIKE форматирования?  [new]
2king2
Member

Откуда:
Сообщений: 545
-2-
2king2
Как бы красивей можно сделать?
красивей можно сделать только на оракле.


Пожалуйста, пример или ссылку дайте. Я гляну. Ок?
11 мар 13, 21:32    [14037472]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр на основе LIKE форматирования?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
2king2
Пожалуйста, пример или ссылку дайте. Я гляну. Ок?


В разделе Oracle Ваш скрипт смотрится корявым, потому что написан на малоизвестном в рамках раздела языке. Может, зайдёте в MS SQL Server или MySQL?

Модератор: Тема перенесена из форума "Oracle".


Сообщение было отредактировано: 11 мар 13, 21:47
11 мар 13, 21:41    [14037488]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр на основе LIKE форматирования?  [new]
2king2
Member

Откуда:
Сообщений: 545
По сути нужно как то из входного числа забирать первый разряд и подставить его в LIKE

123 -> LIKE"_00"
символ "_" должен быть в данном случает равен 1
567 -> LIKE"_00" символ "_" должен быть в данном случает равен 5
11 мар 13, 22:10    [14037540]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр на основе LIKE форматирования?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
что-то из Битовые операторы (ядро СУБД) ?
11 мар 13, 22:13    [14037545]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр на основе LIKE форматирования?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
2king2, не скажу за остальных, но я очень мало понял из вашей постановки.

если номер у вас 123, то родительским для него будет 120, если номер 220, то родитель - 200, если 400 - то родителя нет, правильно?

если так, то где полный набор данных? В ваших входных данных ни одно число невозможно связать с другим связью "ребенок-родитель".
12 мар 13, 13:42    [14040069]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить