SQL Server Лучший способ создания сводного представления из нескольких представлений

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

Вопрос

Учитывая у меня следующее представление, где n = 1..100

detail_view_N

Pant  Quantity Fieldx ...
A     20          
A     13
B     4

В настоящее время у нас есть сводные представления, которые вставляются в таблицу, подобно

summary_view_N

Report_Name     Plant  Count
summary_view_1  A      2
summary_view_1  B      1

Таблица затем используется для создания общего резюме, подобного

summary_view_all_plants

Report_Name     Plant   Count
summary_view_1  A       2
summary_view_1  B       1
...
summary_view_N  X       Y

Есть ли способ создать Summary_view_all_plants без необходимости создавать каждого человека Summary_view_n? Я хотел бы иметь возможность имуть, хотя список отчетов и динамически генерировать представления вставки.

Это было полезно?

Решение 3

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

DECLARE @REPORT_ID nvarchar(50),
    @sqlCommand varchar(1000)

DECLARE REPORT_cursor CURSOR
    FOR SELECT Report_Name
    FROM detail_view_Names

OPEN REPORT_cursor
FETCH NEXT FROM REPORT_cursor INTO @REPORT_ID

WHILE @@FETCH_STATUS = 0
BEGIN

    SET @sqlCommand = 'SELECT ''' + @Report_ID + ''' AS ReportName, Plant, COUNT(*) AS [Count] FROM dbo.' + @Report_ID + ' GROUP BY Plant'
    EXEC (@sqlCommand)

    FETCH NEXT FROM REPORT_cursor INTO @REPORT_ID

END
CLOSE REPORT_cursor
DEALLOCATE REPORT_cursor

Чтобы добавить новый отчет в резюме, просто добавьте новый отчет в DEFTIC_VIEW_NAMES

Другие советы

Есть ли способ создать summary_view_all_plants без необходимости создания каждого отдельного Summary_view_n?

Нет - вы должны определить все таблицы и/или представления, используемые с целью.

Расслоение взглядов не является идеальной практикой. Основатель может измениться, нарушая связанных детей. Сами запросы рискуют не быть оптимизированными для производительности.

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

Я не уверен, что вы имеете в виду под Вставьте представление.

Возможно, такой запрос, как вы ищете?

select Plant, count(*) as Count
from MyTable
group by Plant
order by Plant

Я предполагаю, что все ваши сводные представления получают доступ к одной и той же таблице, MyTable. Анкет Если это не так, вам, скорее всего, понадобится хранящаяся процедура с некоторым динамическим SQL, чтобы генерировать то, что вы ищете ...

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