Pregunta

Dado que tengo la siguiente vista donde N=1..100

detail_view_N

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

Actualmente tenemos vistas de resumen que se insertan en una tabla como

summary_view_N

Report_Name     Plant  Count
summary_view_1  A      2
summary_view_1  B      1

Luego, la tabla se utiliza para crear un resumen general como

summary_view_all_plants

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

¿Hay alguna manera de crear? resumen_vista_todas_plantas sin tener que crear a cada individuo resumen_vista_N?Me gustaría poder iterar a través de una lista de informes y generar dinámicamente las vistas de inserción.

¿Fue útil?

Solución 3

encontrado una buena solución para esto. Tengo una tabla que contiene los nombres de los puntos de vista que quiero resumir (detail_view_Names). Voy pensaba cada Nombre del informe y construir una consulta que realiza el resumen de cada informe.

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

Para añadir un nuevo informe del resumen, sólo tiene que añadir un nuevo informe a los detail_view_Names

Otros consejos

¿Hay alguna manera de crear resumen_vista_todas_plantas sin tener que crear cada resumen_vista_N individual?

No, debe definir todas las tablas y/o vistas utilizadas por una vista.

Superponer las vistas no es una práctica ideal.Una visión fundacional puede cambiar, rompiendo a los niños relacionados.Las consultas en sí corren el riesgo de no optimizarse para el rendimiento.

Insertar valores en una tabla temporal significa que debe eliminar registros existentes o emplear lógica para agregarlos o actualizarlos en consecuencia.También significa que esto debe realizarse periódicamente para mantenerse sincronizado.Una vista indexada, también conocida como vista materializada, podría ser una solución potencial.

No estoy seguro de lo que quieres decir con insertar vista.

¿Quizás una consulta como esta es lo que estás buscando?

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

Supongo que todas sus vistas de resumen acceden a la misma tabla, MyTable.Si este no es el caso, probablemente necesitarás un procedimiento almacenado con algo de SQL dinámico para generar lo que estás buscando...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top