Domanda

Dato ho la seguente visualizzazione dove N=1..100

detail_view_N

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

Attualmente abbiamo viste di riepilogo in cui inserire una tabella come

summary_view_N

Report_Name     Plant  Count
summary_view_1  A      2
summary_view_1  B      1

La tabella viene usata per creare un riepilogo generale come

summary_view_all_plants

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

C'è un modo per creare summary_view_all_plants senza dover creare ogni singolo summary_view_N?Vorrei essere in grado di itterate se un elenco di report e generare dinamicamente inserisci la vista.

È stato utile?

Soluzione 3

Trovato una buona soluzione a questo. Ho una tabella che contiene i nomi dei punti di vista che voglio riassumere (detail_view_Names). Vado pensato ogni Nome report e costruire una query che esegue la sintesi di ogni rapporto.

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

Per aggiungere un nuovo report al sommario, è sufficiente aggiungere un nuovo rapporto al detail_view_Names

Altri suggerimenti

C'è un modo per creare summary_view_all_plants senza dover creare ogni singolo summary_view_N?

No - è necessario definire tutte le tabelle e/o viste utilizzati da vista.

La stratificazione il punto di vista non è un ideale di pratica.Fondatore vista può cambiare, rompendo i relativi figli.La query rischio di non essere ottimizzato per le prestazioni.

L'inserimento di valori in una tabella temporanea significa che si devono rimuovere i record esistenti o utilizzare la logica per aggiungere o aggiornare di conseguenza.Significa anche che questa operazione deve essere eseguita periodicamente per mantenere in sincronia.Una vista indicizzata, AKA vista materializzata, potrebbe essere una potenziale soluzione.

Non sono sicuro di cosa si intende per vista inserto .

Forse una query come questo è quello che stai cercando?

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

Io parto dal presupposto tutte le viste di riepilogo accedono alla stessa tavola, MyTable. Se questo non è il caso, è probabile che bisogno di una stored procedure con un po 'SQL dinamico per generare quello che stai cercando ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top