#sql #sql-server #image #pivot #crosstab
#sql #sql-server #изображение #сводный #перекрестная таблица
Вопрос:
Мне нужно выполнить перекрестный / сводный запрос в SQL Server, используя столбцы всех типов данных varchar и один тип данных изображения. Я создал хранимую процедуру, которая объединяет серию таблиц в этом формате. «B» единственный элемент, который может быть связан с данными изображения. Если поле ДАННЫХ для «B» пустое, то для этой строки также есть пустые IMAGEDATA.
OBJID CONTAINERID ELEMENT DATA IMAGEDATA
1 11 A a123 NULL
1 12 A aa123 NULL
1 11 B b123 0XFFD8FFE
1 12 B bb123 0XFFD8FFE
1 11 C c123 NULL
Затем я использую сводный запрос. В идеале таблица должна выглядеть следующим образом:
OBJID CONTAINERID A B C IMAGEDATA
1 11 a123 b123 c123 0XFFD8FFE
1 12 aa123 bb123 0XFFD8FFE
Проблема в том, что поля данных изображения не могут быть повернуты, сгруппированы, преобразованы и т.д…Я пытался преобразовать изображение в varchar из двоичного файла, но это дает мне тарабарщину.
Ограничения:
- 1. «ЭЛЕМЕНТЫ» являются динамическими, поэтому количество столбцов для сводной таблицы постоянно меняется. (т.Е. Это * могло * пройти весь путь от А до Я.)
- 2. Поля должны использоваться в отчете SSRS, поэтому мне нужно поддерживать тип данных изображения
- 3. Я не могу использовать какой-либо другой язык разработчика (.NET и т.д.)
Есть ли какой-либо другой возможный способ сделать это?
Ответ №1:
Похоже, что нет другого способа сделать это, кроме как вручную добавить / создать столбец IMAGEDATA в качестве последнего шага. Вот мое решение:
Я использовал две отдельные таблицы: одну сводную таблицу без столбца IMAGEDATA и другую таблицу, аналогичную первой, отображаемой в вопросе выше. После того, как я создал запросы для сводной таблицы, я поместил ее во временную таблицу, добавил столбец с типом данных ИЗОБРАЖЕНИЯ и произвел сопоставления для заполнения столбца IMAGEDATA.
Кажется простым решением, но его вряд ли можно обслуживать или оно неэффективно. Я не сильно полагаюсь на сопоставление IMAGEDATA с другими полями, а что, если я решу, что IMAGEDATA будут иметь больше ЭЛЕМЕНТОВ?