sql вопрос ..как я могу динамически добавлять столбцы в набор результатов запроса sql?
-
11-09-2019 - |
Вопрос
Я пишу отчет, чтобы получить подробную информацию об объекте («файлах») в моей базе данных.Мое приложение позволяет пользователям создавать свои собственные флаги для использования с файловыми объектами.Флаги в основном состоят из имени, а экземпляры флагов хранят битовое значение, указывающее, установлено ли оно для родительского файлового объекта.
Я хочу написать запрос, который возвращает одну строку для каждого файла в базе данных, где первые несколько столбцов в наборе результатов содержат сведения о файле (идентификатор, имя, размер и т. д.), а остальные столбцы — это имена флагов с возвращаемыми битовыми значениями. чтобы указать, установлен ли флаг для данной строки файла.
Имеет ли это смысл?Как мне написать запрос?
Спасибо за любую помощь.
Редактировать:Уточнение..
В рамках этого запроса мне нужно запустить подзапрос, который возвращает флаги, созданные пользователем (я не знаю их во время разработки), а затем включить проверку каждого значения флага в основной запрос для возврата подробностей. о файлах.
Упрощенная схема выглядит следующим образом:
- Файл {Идентификатор, Имя}
- Пометить {Идентификатор, Имя}
- FileFlags {FileId, FlagId} — строка в этой таблице указывает, что для файла установлен флаг.
Мне нужен запрос, чтобы вернуть набор результатов со столбцами примерно так:
идентификатор файла Имя файла Флаг1Имя Флаг2Имя .... ФлагNName
Решение
Вы можете начать с просмотра Вращаться функция доступна в SQL Server 2005+.Благодаря этому и некоторой конкатенации строк вы сможете собрать запрос для любого количества столбцов.
Судя по вашему комментарию, ваш выбор будет выглядеть примерно так:
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>, ...
From Table
PIVOT (
...
FOR
...
)
Другие советы
Почему бы не создать хранимую процедуру с необходимой логикой — запросом пользовательских флагов и т. д. — и на этой основе динамически построить строку запроса с нужными вам переменными?
Затем вы можете использовать EXECUTE
чтобы вернуть набор динамических запросов пользователю.Видеть http://msdn.microsoft.com/en-us/library/ms188332.aspx
Похоже, вам нужен перекрестный запрос, в котором вы хотите преобразовать строки в столбцы.Хранятся ли флаги в отдельной таблице как отношение один ко многим к родительской таблице?
Я думаю, вам нужен псевдоним.Вот пример из http://www.sql-tutorial.net/SQL-Aliases.asp
SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee
Мне действительно нужно увидеть вашу схему, чтобы помочь в дальнейшем.
РедактироватьВозможно, вам нужен вложенный SELECT
с.http://sqlzoo.net/1a.htm