sql вопрос ..как я могу динамически добавлять столбцы в набор результатов запроса sql?

StackOverflow https://stackoverflow.com/questions/763454

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top