2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 86
1

Как заполнить переменную большим количеством символов?

13.03.2022, 11:01. Показов 840. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть таблица такого вида
IDNameValue
1A10
1B8
2B7
2C6
3A5

Нужно написать запрос, который приведет ее к такому.

IDABC
1108
2 76
356 

Я написал следующее, запрос работает успешно.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DECLARE @colnames AS nvarchar(MAX),
        @query AS nvarchar(MAX);
SELECT @colnames = 
           stuff((SELECT DISTINCT top(26) ', ' + '"' + t.[Name] + '"'
               FROM [A] t
               WHERE t.[Name] != ''''
               FOR xml path ('')
               ), 1, 1, ''
              );
SET @query =   'select * from
    (
        select  t.[ID] as ID,
                t.[Name] as Name,
                sum(t.[Val]) as agg             
        from [A] t
        where t.[ID] != '''' and t.[Name] != ''''
        group by t.[ID], t.[Name]
    ) as t
pivot (
    sum(agg) 
    for Name in (' + @colnames + ')
    ) as pvt';
EXECUTE(@query);
Но меня смутило, что в @colnames нельзя засунуть больше 128 символов (поэтому, чтобы избежать ошибки, я ограничил наполнение количеством букв в латинском алфавите).
Есть ли способ это обойти?

Прошу простить, если я спрашиваю что-то очевидное, с такими функциями никогда раньше не работал.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2022, 11:01
Ответы с готовыми решениями:

Как заполнить базу данных большим количеством тестовых записей?
В книге по MySQL написано: "В базу данных поместим следующее количество автоматически...

Заполнить БД большим количеством значений
Спроектирована база данных "Доставка товаров". Сложности вызывает заполнения связанных таблиц Заказ...

Как описать текстовую переменную с количеством символов >255?
Пишу: Query1->DatabaseName=FileNameSave.Delete(FileNameSave.Length()-8,9);...

Нужен код с большим количеством вложенных циклов и с большим количеством вложенных ветвлений
Нужен код программы в консольном режиме на Python 200-300 строк с большим количеством вложенных...

6
5394 / 4322 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
13.03.2022, 11:07 2
Цитата Сообщение от Sibil Посмотреть сообщение
в @colnames нельзя засунуть больше 128 символов
почему?
0
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 86
13.03.2022, 11:17  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
почему?
Появляется соответствующая ошибка.
0
5394 / 4322 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
13.03.2022, 11:21 4
Что я делаю не так?
Миниатюры
Как заполнить переменную большим количеством символов?  
0
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 86
13.03.2022, 11:26  [ТС] 5
Цитата Сообщение от qwertehok Посмотреть сообщение
Что я делаю не так?
Уточнение - буквенных кириллических символов, и не в сплошную, а в качестве названий столбцов ('стол', 'стул' и т.д.).
0
5394 / 4322 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
13.03.2022, 11:31 6
Лучший ответ Сообщение было отмечено Sibil как решение

Решение

все равно не понимаю
Миниатюры
Как заполнить переменную большим количеством символов?  
1
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 86
13.03.2022, 12:30  [ТС] 7
qwertehokи правда... ошибку дает следующий фрагмент

SQL
1
2
3
4
pivot (
    SUM(agg) 
    FOR Name IN (' + @colnames + ')
    ) AS pvt';
Сообщение 1038, уровень 15, состояние 4, строка 12
Имя объекта или столбца отсутствует или пусто. Убедитесь, что каждый из столбцов в инструкции SELECT INTO имеет имя. Для других инструкций проверьте наличие пустых имен-псевдонимов. Не допускаются псевдонимы, определенные как [] или "". Измените псевдоним на допустимое имя.
И не понимаю, почему

Добавлено через 4 минуты
SQL
1
2
3
4
5
6
7
8
9
SET @query =   'select * from
    (
        select  t.[ID] as ID,
                t.[Name] as Name,
                sum(t.[Val]) as agg             
        from [A] t
        where t.[ID] != '''' and t.[Name] != ''''
        group by t.[ID], t.[Name]
    ) as t'
Этот фрагмент изолированно не выдает NULL значений, есть значения, допустим '-' или '<>', но это же текст...
agg также нигде не дает ни NULL, ни 0

Добавлено через 35 минут
Я понял причину ошибки.
Этот фрагмент все-таки добавляет пустое значение "", несмотря на WHERE t.[Name] != ''''
Если кто-то еще читает эту тему, подскажите пожалуйста, как это исправить.

SQL
1
2
3
4
5
6
7
8
9
DECLARE @colnames AS nvarchar(MAX),
        @query AS nvarchar(MAX);
SELECT @colnames = 
           stuff((SELECT DISTINCT top(26) ', ' + '"' + t.[Name] + '"'
               FROM [A] t
               WHERE t.[Name] != ''''
               FOR xml path ('')
               ), 1, 1, ''
              );
Добавлено через 6 минут
Проблема была в этом фрагменте
SQL
1
WHERE t.[Name] != ''''
Замена на решила проблему
SQL
1
WHERE t.[Name] != ''
Похоже это произошло потому, что сначала я добавил это условие в закавыченную часть запроса, а потом бездумно перенес эти двойные кавычки в рабочую часть.

Добавлено через 52 секунды
qwertehok, большое вам СПАСИБО, вы прямо направили мое внимание куда надо!!
0
13.03.2022, 12:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2022, 12:30
Помогаю со студенческими работами здесь

Методики обучения multilabel классификаторов c большим (и очень большим) количеством классов
Есть ли особенности обучения multilabel классификатора c большим количеством классов или...

Как работать с очень большим количеством чисел??
Как работать с очень большим кол-вом чисел?? У меня в бин-файле записано около 400 тысяц REAL...

Как реализовать магазин с большим количеством подкатегорий и их сортировкой?
Мне нужно сделать магазин с большим количеством коллекций плитки (800+) и сортировки ее по цене и...

Как преобразовать массив с большим количеством элементов в строку?
Есть ли функция преобразования массива в строку? допустим массив a={8765445678987654567898765212},...

Как существуют сайты с очень большим количеством страниц?
Допустим сайт youtube.сom на нем ежиминутно создаеться множиство новых страниц с новыми видео. Как...

Как писать программы на lisp с большим количеством строк
Простите за ламмерский вопрос. Я только начал изучать лисп и возникла проблема. Как только я...

Как поднять прокси-сервер с большим количеством адресов
Доброго времени суток! Подскажите плз, какими средствами можно решить следующую задачу: ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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