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

Откуда:
Сообщений: 573
SELECT
a._Description,a._Code, b._Description,
COUNT(a._Description) as kol
FROM DEMO_UPP.dbo.nomenklatura_CG a
LEFT JOIN DEMO_UPP.dbo.nomenklatura_CG b
ON a._Description = b._Description
GROUP BY a._Description, b._Description,a._Code
having COUNT(a._Description)>1
ORDER BY a._Description
это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос чтобы отбирал строки с одинковами наименованиями, если переставлены слова, например "гайка желтая" и "желтая гайка" считалось бы одинаковыми позициями?
23 май 12, 16:01    [12602592]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
iiyama
Member

Откуда:
Сообщений: 642
Description разбить на лексеммы
23 май 12, 16:09    [12602677]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
как использовать для этого select *
from sys.dm_fts_parser(' "строка, которую нужно как-нибудь распарсить" ', 1049, 0, 0)
23 май 12, 16:24    [12602814]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
МИхаил__________________
как использовать для этого select *
from sys.dm_fts_parser(' "строка, которую нужно как-нибудь распарсить" ', 1049, 0, 0)
Результат собрать в строку в алфавитном порядке через разделитель и использовать вместо Description в вашем запросе.
23 май 12, 16:32    [12602883]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
user89
Member

Откуда:
Сообщений: 2083
МИхаил__________________,

declare @t table (idx int identity(10,10), s nvarchar(4000))
insert @t
  select null union all select 'гайка желтая' union all select 'желтая гайка' union all select 'гайка светло серая' union all select 'светло серая гайка'
  
;with t1 as (select idx, s + ' ' [a] from @t)
,t2 as
(
  select idx, cast(substring(a,t+1,8000)as nvarchar(4000))a,ltrim(cast(left(a,t-1)as nvarchar(4000)))st 
  ,1 [cnt]
  from t1 outer apply(select charindex(' ',a)t)t
  union all
  select idx,cast(substring(a,t+1,8000)as nvarchar(4000)),ltrim(cast(left(a,t-1)as nvarchar(4000)))
  ,cnt+1
  from t2 cross apply(select charindex(' ',a)t)t
  where t>0
)
select *
, (select st + '' from t2 where t2.idx = t.idx order by st for xml path('')) [new_s]
from @t t
option (maxrecursion 0)

idxsnew_s
10NULL
20гайка желтаягайкажелтая
30желтая гайкагайкажелтая
40гайка светло сераягайкасветлосерая
50светло серая гайкагайкасветлосерая
24 май 12, 14:18    [12608287]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
pegoopik
Member

Откуда: Новосибирск
Сообщений: 54
user89,

idx | s | new_s
---------------------------
1 | a b c d e | abcde
2 | cd e ab | abcde
3 | de abc | abcde
4 | e abcd | abcde
---------------------------

:)
25 май 12, 11:44    [12613716]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
pegoopik
user89,

idx | s | new_s
---------------------------
1 | a b c d e | abcde
2 | cd e ab | abcde
3 | de abc | abcde
4 | e abcd | abcde
---------------------------

:)

ну вставить разделитель какой-нибудь при склейке и всего делов-то.
25 май 12, 12:05    [12613990]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
user89
Member

Откуда:
Сообщений: 2083
, (select st + ',' from t2 where t2.idx = t.idx order by st for xml path('')) [new_s]
25 май 12, 12:17    [12614132]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
pegoopik
Member

Откуда: Новосибирск
Сообщений: 54
Мистер Хэнки,

Никто и не спорит, но сейчас то его там нет:) Но к этому тоже придраться можно:

user89,

В частных случаях сработает, а где гарантия, что разделителя не будет в строках Description?
Вообще это стандартная задача сравнения двух массивов на равенство. Все его элементы надо сравнивать по отдельности.
Но, повторюсь, в частном случае можно и так.
26 май 12, 11:23    [12619161]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
pegoopik
Member

Откуда: Новосибирск
Сообщений: 54
user89,

idx   | s                    | new_s
-----------------------------------------------
1 | 'a, b c d e ' | a,,b,c,d,e,
2 | 'a,b cd e ' | a,b,cd,e,
2.5 | 'a b cd e ' | a,b,cd,e,
3 | 'abcde ' | abcde,
4 | ' a b c d e ' | ,,,,,,,a,b,c,d,e,
5 | 'a b c d e ' | ,,,a,b,c,d,e,
6 | 'ab cd e ' | ,,,ab,cd,e,
7 | ' ab cd e ' | ,,,,ab,cd,e,
8 | ' abcde ' | ,,abcde,
9 | ' abcde ' | ,abcde,

А как насчет левых пробелов?
Можно сказать, ну надо просто добавить ltrim перед обработкой. Но ведь сейчас его там нет:)
26 май 12, 11:42    [12619191]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
pegoopik
Member

Откуда: Новосибирск
Сообщений: 54
pegoopik
idx   | s                    | new_s
-----------------------------------------------
6 | 'ab cd e' | ,,,ab,cd,e,

А как насчет левых пробелов?

жалко редактировать сообщения нельзя. имелись в виду любые двойные или концевые пробелы. + там данные чуть-чуть корявые.
но суть дела это не меняет.
26 май 12, 11:54    [12619207]     Ответить | Цитировать Сообщить модератору
 Re: это запрос выбирает строки с одинаковыми наименованиями, подскажите как написать запрос  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pegoopik, в общем случае нужно понимание того, что является наименованием, а что разделителем, т.к. 'a' тоже вполне может быть разделителем.
26 май 12, 12:26    [12619233]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить