Dynamically, I'm capturing the name of the columns where it appears in two tables so after doing this insert an array of values of table_A in table_B.
Using the CURSOR
feature, I get the columns through a loop and then concatenate the variable to mount the final SQL.
DECLARE @query NVARCHAR(MAX)
DECLARE @insert NVARCHAR(MAX)
DECLARE @name NVARCHAR(MAX)
DECLARE @groupby NVARCHAR(MAX)
SET @query = ''
DECLARE cursor1 CURSOR FOR
SELECT name FROM syscolumns
WHERE [id] = (SELECT [id] FROM sysobjects WHERE name = 'cidades_sumario')
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
IF @name = 'cod_grupo' OR
@name = 'cod_estabel' OR
@name = 'cod_representante' OR
@name = 'uf' OR
@name = 'cidade' OR
@name = 'cod_cliente' OR
@name = 'cod_produto' OR
@name = 'ano'
BEGIN
SET @query = @query + ' cubo.' + @name
SET @groupby = @groupby + ' cubo.' + @name
END
ELSE
BEGIN
SET @query = @query + ' SUM(cubo.' + @name + ')'
END
SET @query = @query + ', '
FETCH NEXT FROM cursor1 INTO @name
END
PRINT @query;
SET @insert = ' INSERT INTO cidades_sumario SELECT ' + substring(@query, 1, (len(@query) - 1)) + ' FROM cubo GROUP BY ' + @groupby
PRINT @insert;
CLOSE cursor1;
DEALLOCATE cursor1;
The return of PRINT @QUERY
is:
cubo.uf, cubo.cidade, cubo.cod_grupo, cubo.cod_representante, cubo.ano, SUM(cubo.jan_valor), SUM(cubo.jan_quant), SUM(cubo.jan_icms), SUM(cubo.jan_ipi), SUM(cubo.jan_pis), SUM(cubo.jan_cofins), SUM(cubo.jan_valorbon), SUM(cubo.jan_quantbon), SUM(cubo.jan_icmsbon), SUM(cubo.jan_ipibon), SUM(cubo.jan_pisbon), SUM(cubo.jan_cofinsbon), SUM(cubo.jan_valordev), SUM(cubo.jan_quantdev), SUM(cubo.jan_icmsdev), SUM(cubo.jan_ipidev), SUM(cubo.jan_pisdev), SUM(cubo.jan_cofinsdev), SUM(cubo.fev_valor), SUM(cubo.fev_quant), SUM(cubo.fev_icms), SUM(cubo.fev_ipi), SUM(cubo.fev_pis), SUM(cubo.fev_cofins), SUM(cubo.fev_valorbon), SUM(cubo.fev_quantbon), SUM(cubo.fev_icmsbon), SUM(cubo.fev_ipibon), SUM(cubo.fev_pisbon), SUM(cubo.fev_cofinsbon), SUM(cubo.fev_valordev), SUM(cubo.fev_quantdev), SUM(cubo.fev_icmsdev), SUM(cubo.fev_ipidev), SUM(cubo.fev_pisdev), SUM(cubo.fev_cofinsdev), SUM(cubo.mar_valor), SUM(cubo.mar_quant), SUM(cubo.mar_icms), SUM(cubo.mar_ipi), SUM(cubo.mar_pis), SUM(cubo.mar_cofins), SUM(cubo.mar_valorbon), SUM(cubo.mar_quantbon), SUM(cubo.mar_icmsbon), SUM(cubo.mar_ipibon), SUM(cubo.mar_pisbon), SUM(cubo.mar_cofinsbon), SUM(cubo.mar_valordev), SUM(cubo.mar_quantdev), SUM(cubo.mar_icmsdev), SUM(cubo.mar_ipidev), SUM(cubo.mar_pisdev), SUM(cubo.mar_cofinsdev), SUM(cubo.abr_valor), SUM(cubo.abr_quant), SUM(cubo.abr_icms), SUM(cubo.abr_ipi), SUM(cubo.abr_pis), SUM(cubo.abr_cofins), SUM(cubo.abr_valorbon), SUM(cubo.abr_quantbon), SUM(cubo.abr_icmsbon), SUM(cubo.abr_ipibon), SUM(cubo.abr_pisbon), SUM(cubo.abr_cofinsbon), SUM(cubo.abr_valordev), SUM(cubo.abr_quantdev), SUM(cubo.abr_icmsdev), SUM(cubo.abr_ipidev), SUM(cubo.abr_pisdev), SUM(cubo.abr_cofinsdev), SUM(cubo.mai_valor), SUM(cubo.mai_quant), SUM(cubo.mai_icms), SUM(cubo.mai_ipi), SUM(cubo.mai_pis), SUM(cubo.mai_cofins), SUM(cubo.mai_valorbon), SUM(cubo.mai_quantbon), SUM(cubo.mai_icmsbon), SUM(cubo.mai_ipibon), SUM(cubo.mai_pisbon), SUM(cubo.mai_cofinsbon), SUM(cubo.mai_valordev), SUM(cubo.mai_quantdev), SUM(cubo.mai_icmsdev), SUM(cubo.mai_ipidev), SUM(cubo.mai_pisdev), SUM(cubo.mai_cofinsdev), SUM(cubo.jun_valor), SUM(cubo.jun_quant), SUM(cubo.jun_icms), SUM(cubo.jun_ipi), SUM(cubo.jun_pis), SUM(cubo.jun_cofins), SUM(cubo.jun_valorbon), SUM(cubo.jun_quantbon), SUM(cubo.jun_icmsbon), SUM(cubo.jun_ipibon), SUM(cubo.jun_pisbon), SUM(cubo.jun_cofinsbon), SUM(cubo.jun_valordev), SUM(cubo.jun_quantdev), SUM(cubo.jun_icmsdev), SUM(cubo.jun_ipidev), SUM(cubo.jun_pisdev), SUM(cubo.jun_cofinsdev), SUM(cubo.jul_valor), SUM(cubo.jul_quant), SUM(cubo.jul_icms), SUM(cubo.jul_ipi), SUM(cubo.jul_pis), SUM(cubo.jul_cofins), SUM(cubo.jul_valorbon), SUM(cubo.jul_quantbon), SUM(cubo.jul_icmsbon), SUM(cubo.jul_ipibon), SUM(cubo.jul_pisbon), SUM(cubo.jul_cofinsbon), SUM(cubo.jul_valordev), SUM(cubo.jul_quantdev), SUM(cubo.jul_icmsdev), SUM(cubo.jul_ipidev), SUM(cubo.jul_pisdev), SUM(cubo.jul_cofinsdev), SUM(cubo.ago_valor), SUM(cubo.ago_quant), SUM(cubo.ago_icms), SUM(cubo.ago_ipi), SUM(cubo.ago_pis), SUM(cubo.ago_cofins), SUM(cubo.ago_valorbon), SUM(cubo.ago_quantbon), SUM(cubo.ago_icmsbon), SUM(cubo.ago_ipibon), SUM(cubo.ago_pisbon), SUM(cubo.ago_cofinsbon), SUM(cubo.ago_valordev), SUM(cubo.ago_quantdev), SUM(cubo.ago_icmsdev), SUM(cubo.ago_ipidev), SUM(cubo.ago_pisdev), SUM(cubo.ago_cofinsdev), SUM(cubo.stm_valor), SUM(cubo.stm_quant), SUM(cubo.stm_icms), SUM(cubo.stm_ipi), SUM(cubo.stm_pis), SUM(cubo.stm_cofins), SUM(cubo.stm_valorbon), SUM(cubo.stm_quantbon), SUM(cubo.stm_icmsbon), SUM(cubo.stm_ipibon), SUM(cubo.stm_pisbon), SUM(cubo.stm_cofinsbon), SUM(cubo.stm_valordev), SUM(cubo.stm_quantdev), SUM(cubo.stm_icmsdev), SUM(cubo.stm_ipidev), SUM(cubo.stm_pisdev), SUM(cubo.stm_cofinsdev), SUM(cubo.out_valor), SUM(cubo.out_quant), SUM(cubo.out_icms), SUM(cubo.out_ipi), SUM(cubo.out_pis), SUM(cubo.out_cofins), SUM(cubo.out_v
But the return of PRINT @insert
does not return anything