Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
1

SQL запрос. Из названия нужно убрать лишнее слова по списку из другой таблицы

08.08.2019, 21:55. Показов 3088. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть столбик с названием продукта. Из названия нужно убрать лишнее слова. Список лишних слов находится в другой таблице.

На данный момент всё это делаю в Екселе с помощью Макрос.

Возможно так в SQL SERVER ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2019, 21:55
Ответы с готовыми решениями:

Передача названия таблицы в sql запрос
Здрасте! Не получается...Пробую так: string reg = txtReg.text; string sql =...

Нужно задать sql запрос. не понимаю как. Нужно из одной таблицы вывести данные
В общем, нужно задать sql запрос где будет подсчитано общее кол-во записей (name - название работ)...

Есть код. Нужно убрать лишнее
Здравствуйте! Есть код игры крестики-нолики, 5 в ряд. Как сделать так, чтобы оставался код только...

Нужно через sql запрос убрать дату из поля DataTime
Дорогие форумчане. Возникла новая проблема, на этот раз с выводом данных в DBGrid. У меня есть...

21
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
09.08.2019, 08:01 2
vadca, конечно возможно
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 08:05  [ТС] 3
Гениально. Может есть предложение как это сделать ?
0
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
09.08.2019, 08:51 4
vadca,
SQL
1
SELECT * FROM Table1 WHERE ProductName NOT IN (SELECT UnnecessaryProduct FROM Table2)
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
09.08.2019, 11:25 5
AndreyVorobey,
хотелку ТС внимательно читал?
0
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
09.08.2019, 11:34 6
pincet, наверное...
Цитата Сообщение от vadca Посмотреть сообщение
Из названия нужно убрать лишнее слова
он хочет изменить имя поля?
Цитата Сообщение от vadca Посмотреть сообщение
убрать лишнее слова
удалить?
или, может, еще какой-то вариант?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 11:50  [ТС] 7
Можно создать View в котором будут пропадать ненужные слова
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
09.08.2019, 12:28 8
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
или, может, еще какой-то вариант?
если я правильно понял ТС - то из "маргарин мать-его 30%" нужно убрать "мать-его"
1
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
09.08.2019, 12:31 9
vadca,
в первой таблице есть:
ProductName
продукт1
продукт2
продукт3
во второй таблице:
ProductName
продукт3
нужно на выходе получить так?
ProductName
продукт1
продукт2

pincet, скоро узнаем, что же он имел ввиду)
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 13:34  [ТС] 10
в первой таблице:
Unisex Tunic 491 Purple Care UK Tax Tab
BC Dress RC 5716 Lavender BR01 White

во второй:
Unisex
Tunic
Care
UK
Tax
TAB
BC
Dress
RC
Lavender

На выходе:
491 Purple
5716 BR01 White
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
09.08.2019, 13:57 11
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
create function dbo.fnEliminateWords
(
 @Value varchar(max),
 @WordsList varchar(max)
)
returns varchar(max)
as
begin
 declare @result varchar(max) = @Value;
 
 select
  @result = replace(@result, ltrim(rtrim(value)), '')
 from
  string_split(@WordsList, ',');
 
 return @result;
end;
go
 
declare @t table (s varchar(max));
declare @w table (w varchar(100));
 
insert into @t
values
 ('Unisex Tunic 491 Purple Care UK Tax Tab'),
 ('BC Dress RC 5716 Lavender BR01 White');
 
insert into @w
values
 ('Unisex'), ('Tunic'), ('Care'), ('UK'), ('Tax'), ('TAB'), ('BC'), ('Dress'), ('RC'), ('Lavender');
 
declare @WordsList varchar(max);
 
select
 @WordsList = string_agg(w, ',')
from
 @w;
 
select
 dbo.fnEliminateWords(s, @WordsList)
from
 @t;
go
 
drop function dbo.fnEliminateWords;
go
Лишние пробелы уберете сами.
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 14:21  [ТС] 12
Вместо:

C#
1
2
3
values
 ('Unisex Tunic 491 Purple Care UK Tax Tab'),
 ('BC Dress RC 5716 Lavender BR01 White');
C#
1
2
values
 (select nazvanie from table1;;



C#
1
2
3
insert into @w
values
 ('Unisex'), ('Tunic'), ('Care'), ('UK'), ('Tax'), ('TAB'), ('BC'), ('Dress'), ('RC'), ('Lavender');
C#
1
2
3
insert into @w
values
 (select lishnie_slova from table2;
Правильно ?

У меня SQL Server 2014
У меня ошибка при исполнение твоего кода:
Добавлено через 29 секунд
Msg 195, Level 15, State 10, Line 35
'string_agg' is not a recognized built-in function name.
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
09.08.2019, 14:29 13
Лучший ответ Сообщение было отмечено vadca как решение

Решение

Цитата Сообщение от vadca Посмотреть сообщение
У меня SQL Server 2014
Тогда так
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
declare @t table (s varchar(max));
declare @w table (w varchar(100));
 
insert into @t
values
 ('Unisex Tunic 491 Purple Care UK Tax Tab'),
 ('BC Dress RC 5716 Lavender BR01 White');
 
insert into @w
values
 ('Unisex'), ('Tunic'), ('Care'), ('UK'), ('Tax'), ('TAB'), ('BC'), ('Dress'), ('RC'), ('Lavender');
 
select
 rtrim(c.x.value('./text()[1]', 'varchar(max)'))
from
 @t t cross apply
 (select cast(cast('' as xml).query('sql:column("t.s")') as varchar(max))) a(s) cross apply
 (select cast('<w>' + replace(a.s, ' ', '</w><w>') + '</w>' as xml)) b(x) cross apply
 (
  select
   wl.w + ' '
  from
   (select row_number() over (order by (select 1)), w.n.value('./text()[1]', 'varchar(100)') from b.x.nodes('w') w(n)) wl(rn, w)
  where
   not exists(select 1 from @w where w = wl.w)
  order by
   wl.rn
  for xml path(''), type
 ) c(x);
1
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
09.08.2019, 14:34 14
я так и думал. 1НФ сейчас немодно стало
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
09.08.2019, 14:57  [ТС] 15
Вот полный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
declare @t table (s varchar(max));
declare @w table (w varchar(100));
 
insert into @t
 
 select pavadinimas from import_excel where order_nr='92458';
 
insert into @w
select slova from Slova;
 
select
 rtrim(c.x.value('./text()[1]', 'varchar(max)'))
from
 @t t cross apply
 (select cast(cast('' as xml).query('sql:column("t.s")') as varchar(max))) a(s) cross apply
 (select cast('<w>' + replace(a.s, ' ', '</w><w>') + '</w>' as xml)) b(x) cross apply
 (
  select
   wl.w + ' '
  from
   (select row_number() over (order by (select 1)), w.n.value('./text()[1]', 'varchar(100)') from b.x.nodes('w') w(n)) wl(rn, w)
  where
   not exists(select 1 from @w where w = wl.w)
  order by
   wl.rn
  for xml path(''), type
 ) c(x);

А как теперь сделать так, что бы видны были все исходные столбики и к ним добавить столбик с обрезанным названием. ?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
12.08.2019, 16:30  [ТС] 16
invm, Помоги пожалуйста, как сделать что бы видны были все исходные столбики и к ним добавить столбик с обрезанным названием ?
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
12.08.2019, 17:19 17
vadca,
T-SQL
1
2
3
4
...
select
 t.*, rtrim(c.x.value('./text()[1]', 'varchar(max)'))
...
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
12.08.2019, 18:00  [ТС] 18
invm, Спасибо. но ещё нужна помощь:

C#
1
2
3
4
5
6
7
8
9
insert into @t
 
 select pavadinimas, ModelID from import_excel where Order_nr='92458';
 
insert into @w
select slova from Slova;
 
select
 t.*, rtrim(c.x.value('./text()[1]', 'varchar(max)'))
когда добавляю нужные столбики, ошибка:

Msg 213, Level 16, State 1, Line 5
Column name or number of supplied values does not match table definition.
0
2806 / 1676 / 884
Регистрация: 14.04.2015
Сообщений: 5,717
13.08.2019, 09:27 19
vadca, ошибка ведь читабельна - Имя столбца или количество предоставленных значений не соответствует определению таблицы. достаточно сравнить входную выборку и выходную таблицу, чтобы понять, в чем проблема. или проще из-за каждого чиха писать на форум?
0
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 109
13.08.2019, 09:44  [ТС] 20
AndreyVorobey, я понимаю что там написано. Дело в том, что я этот код не писал и он мне не по силам.

Добавляя в первую таблицу столбики, мне во вторую добавлять ничего нинадо, там всегда только один столбик. А сервер рурается что не совподают количество столбиков между первой и второй таблицей. Значит проблема где то глубже. И я не знаю на неё ответ.

Добавлено через 4 минуты
Всё всётаки разобрался что к чему. Всем добра и спасибо.
0
13.08.2019, 09:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2019, 09:44
Помогаю со студенческими работами здесь

SQL запрос для выбора значений с 1 таблицы и отображения в другой
Здравствуйте! В общем у меня имеется 2 таблицы читатели и книги, и в 3 таблице нужно помимо...

Создание временной таблицы,где ее название-переменная,названия столбцов-поля другой таблицы ..
Помогите,пож-ста,справиться со следующей проблемой. Есть главная таблица с полями:дата,игрок,время...

AJAX: пробегаем по списку в DGW и для каждого элемента дергаем SQL-запрос
Здравствуйте. Пожалуйста, подскажите чайнику возможно ли в принципе то, что я пытаюсь наваять? ...

Мне нужно чтобы мой запрос возвращал названия по дате. То есть чтобы по дате сортировал названия
У меня есть запрос. В нем я хочу вывести по дате отсортировать все что я додал в БД и вывести...

Поменять названия колонок, изменяя свой SQL запрос
Подскажите как поменять названия колонок изменяя свой SQL запрос? В элементе SQLDataSet поле...

Вставка в комбобокс или текстбокс названия вместо ID из другой таблицы
Добрый день. Имеется 2 таблицы: Сотрудники с полями СотрудникИД, СотрудникИмя, ДолжностьИД и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru