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

Откуда:
Сообщений: 3
Добрый вечер, уважаемые форумчане!
Я начал изучать программирование SQL. Дали задание, но никак не могу разобраться как сделать:
Нужно вывести строки,в которых каждый символ(буква, цифра) повторяется не более 3 раз
6 окт 14, 19:12    [16667926]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
SERG1257
Member

Откуда:
Сообщений: 2751
Строки в которых буква 'A' повторяется БОЛЬШЕ трех раз
where 
CHARINDEX('A',name,1)>0 and 
CHARINDEX('A',name,CHARINDEX('A',name,1)+1)>0 and
CHARINDEX('A',name,CHARINDEX('A',name,CHARINDEX('A',name)+1)+1)>0
6 окт 14, 20:10    [16668114]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
WITH CTE AS(SELECT * FROM(VALUES('trsertytt665464'),('dyrtew4'),('ifd75teruehtyf'))T(S))
SELECT *
FROM CTE
WHERE NOT EXISTS
(
 SELECT *
 FROM master.dbo.spt_values V
 WHERE V.type='P'
   AND V.number BETWEEN 1 AND LEN(CTE.S)
 GROUP BY SUBSTRING(CTE.S,V.number,1)
 HAVING COUNT(*)>3
);
Вместо master.dbo.spt_values используйте свою таблицу чисел.
6 окт 14, 21:15    [16668264]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
KirillNTR
Member

Откуда:
Сообщений: 3
iap, спасибо большое, но сложность заключается в том,что запрос должен реагировать на все буквенные и цифровые символы
6 окт 14, 21:22    [16668291]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
KirillNTR
iap, спасибо большое, но сложность заключается в том,что запрос должен реагировать на все буквенные и цифровые символы
А он что же, не реагирует?!
Пример - в студию!
6 окт 14, 21:28    [16668311]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
KirillNTR
iap, спасибо большое, но сложность заключается в том,что запрос должен реагировать на все буквенные и цифровые символы
Сложность в том, что вы даже не попытались скопировать, запустить и понять как работает код который вам написали.
6 окт 14, 22:51    [16668696]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
KirillNTR
Member

Откуда:
Сообщений: 3
iap, реагирует. Разобрался, спасибо большое! Забыл указать что должна быть реакция на подряд идущие 3 символа.
7 окт 14, 12:27    [16670458]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
KirillNTR
iap, реагирует. Разобрался, спасибо большое! Забыл указать что должна быть реакция на подряд идущие 3 символа.
В каждом Вашем сообщении - новая задача? Круто!
И как же Вы думаете её решать?
7 окт 14, 12:41    [16670551]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
WITH CTE AS(SELECT * FROM(VALUES('trsertytt6665464'),('dyrtew4'),('ifd75teruehtyf'),('fhcytrezx5555bv,hjg'))T(S))
SELECT *
FROM CTE
WHERE NOT EXISTS
(
 SELECT * FROM
 (
  SELECT N=ROW_NUMBER()OVER(ORDER BY V.number)-ROW_NUMBER()OVER(PARTITION BY SUBSTRING(CTE.S,V.number,1)ORDER BY V.number),*
  FROM master.dbo.spt_values V
  WHERE V.type='P'
    AND V.number BETWEEN 1 AND LEN(CTE.S)
 ) T
 GROUP BY T.N,SUBSTRING(CTE.S,T.number,1)
 HAVING COUNT(*)>3
);
7 окт 14, 12:52    [16670637]     Ответить | Цитировать Сообщить модератору
 Re: Написать SQL запрос, требуется помощь  [new]
west74
Member

Откуда: Челябинск
Сообщений: 76
если правильно понял задачу
заведите себе функцию для разделения строк по букве :


create function split_word( @tt varchar(max))
returns @t table
(
row_value nvarchar(1)
)
as
begin
declare @i int;
set @i=1;
while len(@tt)>=@i
begin
insert into @t (row_value) values (substring(@tt,@i,1));
set @i=@i+1
end
return;
end

и используйте :

begin
declare @t table (tt varchar(100))
insert into @t (tt) values ('fff'),('ffa'),('faa'),('aaa') ;

select * from @t where not exists(select row_value from split_word(tt) group by row_value having COUNT(*)>2);
end
7 окт 14, 13:20    [16670800]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить