Этот ответ может возвратиться неожиданные результаты Для последовательных результатов, использовать один из ДЛЯ методов ПУТИ XML, подробно изложенных в других ответах.
Использование
COALESCE
:DECLARE @Names VARCHAR(8000) SELECT @Names = COALESCE(@Names + ', ', '') + Name FROM People
Просто некоторое объяснение (так как этот ответ, кажется, получает относительно регулярные представления):
- Объединяют, действительно просто полезный обман, который выполняет две вещи:
1) Никакая потребность инициализировать
@Names
со значением пустой строки.2) Никакая потребность снять изоляцию с дополнительного разделителя в конце.
- решение выше даст неправильные результаты, если строка будет иметь ПУСТОЙ УКАЗАТЕЛЬ значение Имени (если будет ПУСТОЙ УКАЗАТЕЛЬ , , то ПУСТОЙ УКАЗАТЕЛЬ сделает
@Names
ПУСТОЙ УКАЗАТЕЛЬ после той строки, и следующая строка запустится по как пустая строка снова. Легко зафиксированный с одним из двух решений:DECLARE @Names VARCHAR(8000) SELECT @Names = COALESCE(@Names + ', ', '') + Name FROM People WHERE Name IS NOT NULL
или:
DECLARE @Names VARCHAR(8000) SELECT @Names = COALESCE(@Names + ', ', '') + ISNULL(Name, 'N/A') FROM People
В зависимости от того, какое поведение Вы хотите (право преимущественной покупки просто фильтрует ПУСТОЙ УКАЗАТЕЛЬ с, вторая опция сохраняет их в списке с сообщением маркера [заменяют and/A' тем, что подходит для Вас]).
Стандартный список Python не сортируется ни в какой форме. Стандартный модуль heapq можно использовать для добавления в O (log n) к существующему списку и удаления наименьшего из O (log n), но это не отсортированный список в вашем определении.
Существуют различные реализации сбалансированных деревьев для Python, которые соответствуют вашим требованиям, например rbtree , RBTree или pyavl .
. Модуль heapq
может удовлетворить ваши потребности, хотя он (пока) не предоставляет пользовательской функции поиска. Он реализует очередь кучи с использованием обычного списка. Вам нужно будет написать свой собственный эффективный тест на членство, который использует внутреннюю структуру очереди (это можно сделать в O (log n) , я бы сказал ...). Есть один недостаток: извлечение отсортированного списка имеет сложность O (n log n) .