Вопрос SQL .. Как я могу динамически добавлять столбцы в набор результатов запроса SQL? - PullRequest
0 голосов
/ 18 апреля 2009

Я пишу отчет, чтобы вернуть подробности об объекте («файлы») в моей базе данных. Мое приложение позволяет пользователям создавать свои собственные флаги для использования против файловых объектов. Флаги в основном состоят из имени, затем экземпляры флага хранят битовое значение, чтобы указать, установлено ли оно для родительского файлового объекта.

Я хочу написать запрос, который возвращает по одной строке на файл в базе данных, где первые несколько столбцов в наборе результатов содержат сведения о файле (идентификатор, имя, размер и т. Д.), А остальные столбцы - это имена флагов, с битовые значения возвращаются, чтобы указать, установлен ли флаг для данной строки файла.

Это имеет смысл? Как мне написать запрос?

Спасибо за любую помощь.

Редактировать: Уточнение ..

В рамках этого запроса мне нужно выполнить подзапрос, который возвращает флаги, созданные пользователем (я не знаю их во время разработки), а затем включить проверку для каждого значения флага в основной запрос вернуть подробности о файлах.

Упрощенная схема выглядит следующим образом:

  • File {Id, Name}
  • Flag {Id, Name}
  • FileFlags {FileId, FlagId} - строка в этой таблице указывает, что для файла установлен флаг

Мне нужен запрос для возврата результирующего набора со столбцами примерно так:

FileId FileName Flag1Name Flag2Name .... FlagNName

Ответы [ 4 ]

1 голос
/ 18 апреля 2009

Почему бы не создать хранимую процедуру с необходимой логикой - запросить пользовательские флаги и т. Д. - и на этой основе динамически создать строку запроса с необходимыми переменными?

Затем можно использовать EXECUTE, чтобы вернуть пользователю динамический запрос. Смотри http://msdn.microsoft.com/en-us/library/ms188332.aspx

1 голос
/ 18 апреля 2009

Вы можете начать с просмотра функции Pivot , доступной в SQL Server 2005+. С этим и некоторой конкатенацией строк вы сможете собрать запрос для любого количества столбцов

На основании вашего комментария ваш выбор будет выглядеть примерно так:

        SELECT <non-pivoted column>,

            [first pivoted column] AS <column name>,

            [second pivoted column] AS <column name>, ...
    From Table 
    PIVOT (
...
FOR 
...
)
0 голосов
/ 18 апреля 2009

Похоже, что вам нужен перекрестный запрос, в котором вы хотите превратить строки в столбцы. Хранятся ли флаги в отдельной таблице как отношение один ко многим с родительской таблицей?

0 голосов
/ 18 апреля 2009

Я думаю, что вы хотите, это псевдоним. Вот пример из 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...