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

Учитывая, что у меня есть следующий вид, где 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 ]

1 голос
/ 21 января 2010

Есть ли способ создания summary_view_all_plants без необходимости создавать каждый отдельный summary_view_N?

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

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

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

0 голосов
/ 02 февраля 2010

Нашел хорошее решение для этого. У меня есть таблица, которая содержит имена представлений, которые я хочу обобщить (detail_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

Чтобы добавить новый отчет в сводку, просто добавьте новый отчет в detail_view_Names

0 голосов
/ 21 января 2010

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

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

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

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

...