Question

Étant donné que j'ai la vue suivante où N = 1..100

detail_view_N

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

Nous avons actuellement des vues sommaires qui insèrent à une table comme

summary_view_N

Report_Name     Plant  Count
summary_view_1  A      2
summary_view_1  B      1

Le tableau est ensuite utilisé pour créer un résumé global comme

summary_view_all_plants

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

Est-il possible de créer summary_view_all_plants sans avoir à créer chaque individu summary_view_N ? Je voudrais pouvoir itterate si une liste des rapports et générer dynamiquement les vues d'insertion.

Était-ce utile?

La solution 3

une bonne solution trouvé à ce sujet. J'ai une table qui contient les noms des points de vue que je veux résumer (detail_view_Names). Je vais pensé chaque nom de rapport et construire une requête qui effectue le résumé de chaque rapport.

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

Pour ajouter un nouveau rapport au résumé, il suffit d'ajouter un nouveau rapport à la detail_view_Names

Autres conseils

  

Y at-il un moyen de créer summary_view_all_plants sans avoir à créer chaque individu summary_view_N?

Non - vous devez définir toutes les tables et / ou des vues utilisées par une vue

.

Superposition les vues ne sont pas une pratique idéale. Un point de vue fondateur peut changer, casser les enfants associés. Les requêtes elles-mêmes risquent de ne pas être optimisés pour la performance.

Insertion des valeurs dans une table temporaire signifie que vous devez supprimer des enregistrements existants ou utiliser la logique pour ajouter ou mettre à jour en conséquence. Cela signifie également que cela doit être effectué périodiquement pour maintenir synchronisés. Une vue indexée, AKA vue matérialisée, pourrait être une solution potentielle.

Je ne sais pas ce que vous entendez par vue insertion .

Peut-être une question de ce genre est ce que vous cherchez?

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

Je suppose toutes vos vues sommaires accèdent à la même table, MyTable. Si ce n'est pas le cas, vous aurez probablement besoin d'une procédure stockée avec une SQL dynamique pour générer ce que vous cherchez ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top