Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Neosan
Member

Откуда:
Сообщений: 53
Пример ячейки (скалярная переменная) где в виде текста указаны числа (разделители: для столбца "," для строки ";"):
DECLARE @tmp VARCHAR(MAX)='2,2,2,2,2;5,5,5,5,5;'

Цель: Нужно подсчитать сумму столбцов указанных в такой ячейки.

Решение: импортировать в WITH обобщенное_табличное_выражение и сделать агрегацию SUM

Вопрос об импорте из ячейки (скалярной переменной) в таблицу (ни разу не встречал), если кто знает просьба помочь.
19 сен 14, 16:18    [16596508]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Glory
Member

Откуда:
Сообщений: 104751
DECLARE @tmp VARCHAR(MAX)='2,2,2,2,2;5,5,5,5,5;', @sql varchar(max)
set @sql = 'select '+replace(replace(@tmp, ',','+'), ';','')
exec(@sql)
19 сен 14, 16:24    [16596540]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Neosan
Member

Откуда:
Сообщений: 53
Glory, к сожалению выдает не верный результат, должно получиться 2 числа (для каждого столбца)
1) 2+2+2+2+2=10
2) 5+5+5+5+5=25
19 сен 14, 16:31    [16596557]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Glory
Member

Откуда:
Сообщений: 104751
Neosan
Glory, к сожалению выдает не верный результат, должно получиться 2 числа (для каждого столбца)
1) 2+2+2+2+2=10
2) 5+5+5+5+5=25

Распарсить не судьба ?
19 сен 14, 16:33    [16596566]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Neosan
Member

Откуда:
Сообщений: 53
Glory, ваша техника суммирования понятна,
но необходим именно импорту в WITH обобщенное_табличное_выражение
(т.к. именно он позволит делать более сложные операции с данными)
19 сен 14, 16:41    [16596601]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Glory
Member

Откуда:
Сообщений: 104751
Neosan
но необходим именно импорту в WITH обобщенное_табличное_выражение

WITH - это всего лишь обертка. Что вы собрались туда импортировать ?
19 сен 14, 16:43    [16596612]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Neosan
Member

Откуда:
Сообщений: 53
Glory, кроме суммирования столбцов, нужно перемножение строк с суммированием, перекрестное умножение ячеек и др. мат.операции
Именно поэтому и нужна таблица.
19 сен 14, 16:53    [16596668]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Glory
Member

Откуда:
Сообщений: 104751
Neosan
Именно поэтому и нужна таблица.

Прежде всего вам нужно сформулировать задачу.
А формулируется она так - парсинг строки с произвольным разделителем.
Задаче этой лет чуть меньше, чем динозаврам.
19 сен 14, 16:55    [16596684]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Neosan
Glory, к сожалению выдает не верный результат, должно получиться 2 числа (для каждого столбца)
1) 2+2+2+2+2=10
2) 5+5+5+5+5=25


1) Ногуглите CLR библиотеку регуряных выражений под SQL, чтобы вы могли сделать regEx split по ;, а потом по ,
или
2) Сделайте Script Block в SSIS , где задействуйте на C# регулярные выражения или иной парзер
19 сен 14, 16:56    [16596690]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Neosan
Member

Откуда:
Сообщений: 53
-импортировать нужно числовые данные для 2-х столбцов из скалярной переменной, для дальней обработки агрег.функциями (вышеуказанная сумма столбцов лишь один из вариантов)
19 сен 14, 16:57    [16596703]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
Neosan
Member

Откуда:
Сообщений: 53
классно было бы использовать BULK INSERT но его нельзя использовать для извлечения данных из баз данных SQL Server
19 сен 14, 17:05    [16596770]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Neosan
-импортировать нужно числовые данные для 2-х столбцов из скалярной переменной, для дальней обработки агрег.функциями (вышеуказанная сумма столбцов лишь один из вариантов)


оба мои предложения по прежнему применимы.

Может вы разъясните, что вы в целом делаете и что это за скалярная переменная.
19 сен 14, 18:02    [16597168]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
DormidontLoewe
Member [заблокирован]

Откуда: Лондонобад
Сообщений: 72
Glory
DECLARE @tmp VARCHAR(MAX)='2,2,2,2,2;5,5,5,5,5;', @sql varchar(max)
set @sql = 'select '+replace(replace(@tmp, ',','+'), ';','')
exec(@sql)


DECLARE @tmp VARCHAR(MAX)='2,2,2,2,2;5,5,5,5,5', @sql varchar(max)
set @sql = 'select '+replace(replace(@tmp, ',','+'), ';',',')
print @sql
exec (@sql)

(No column name)	(No column name)
10	                        25                          
19 сен 14, 19:40    [16597677]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
DormidontLoewe
Member [заблокирован]

Откуда: Лондонобад
Сообщений: 72
Neosan
Glory, к сожалению выдает не верный результат, должно получиться 2 числа (для каждого столбца)
1) 2+2+2+2+2=10
2) 5+5+5+5+5=25


Так что ли?
DECLARE @tmp VARCHAR(MAX)='2,2,2,2,2;5,5,5,5,5', @sql varchar(max)
set @sql = 'select '+replace(replace(@tmp, ',','+'), ';',',')
print @sql
exec (@sql)

select 2+2+2+2+2,5+5+5+5+5

(No column name)	(No column name)
10	                25
19 сен 14, 19:49    [16597710]     Ответить | Цитировать Сообщить модератору
 Re: Обучение: Задача "Подсчет суммы чисел указанных в ячейки типа Varchar(max)"  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
DormidontLoewe
Так что ли?


Там наверное ещё куча строк и запрос получится огромный
19 сен 14, 20:17    [16597848]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить