Advertisement
Pionez

Untitled

May 5th, 2020
1,279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 14.98 KB | None | 0 0
  1. USE [PRIARABLAU];
  2. GO
  3.  
  4. /****** Object:  StoredProcedure [dbo].[P_DA_VendasPorAno_VS_AnoAnterior]    Script Date: 05/05/2020 12:24:28 ******/
  5.  
  6. SET ANSI_NULLS ON;
  7. GO
  8. SET QUOTED_IDENTIFIER ON;
  9. GO
  10. ALTER PROCEDURE [dbo].[P_DA_VendasPorAno_VS_AnoAnterior]
  11. -- Add the parameters for the stored procedure here
  12. @Cliente        NVARCHAR(15) = NULL,
  13. @DataInicio     DATE         = NULL,
  14. @DataFim        DATE         = NULL,
  15. @TipoDocumentos NVARCHAR(15) = NULL,
  16. @Valencia       NVARCHAR(50) = NULL
  17. AS
  18.     BEGIN
  19.         DECLARE @Clientes AS NVARCHAR(MAX);
  20.         DECLARE @Helper AS NVARCHAR(MAX);
  21.         DECLARE CursorEntidadesAssociadas CURSOR
  22.         FOR SELECT EntidadeAssociada
  23.             FROM EntidadesAssociadas WITH(NOLOCK)
  24.             WHERE TipoEntidade = 'C'
  25.                   AND TipoEntidadeAssociada = 'C'
  26.                   AND Entidade = @Cliente;
  27.         SET @Clientes = CONCAT(@Clientes, CONCAT(@Cliente, ','));
  28.         IF
  29.         (
  30.             SELECT COUNT(EntidadeAssociada)
  31.             FROM EntidadesAssociadas WITH(NOLOCK)
  32.             WHERE TipoEntidade = 'C'
  33.                   AND TipoEntidadeAssociada = 'C'
  34.                   AND Entidade = @Cliente
  35.         ) > 0
  36.             BEGIN
  37.                 OPEN CursorEntidadesAssociadas;
  38.                 FETCH NEXT FROM CursorEntidadesAssociadas INTO @Helper;
  39.                 WHILE @@FETCH_STATUS = 0
  40.                     BEGIN
  41.                         SET @Clientes = CONCAT(@Clientes, CONCAT(@Helper, ','));
  42.                         FETCH NEXT FROM CursorEntidadesAssociadas INTO @Helper;
  43.         END;
  44.                 CLOSE CursorEntidadesAssociadas;
  45.                 DEALLOCATE CursorEntidadesAssociadas;
  46.         END;
  47.         SET @Clientes = LEFT(@Clientes, LEN(@Clientes) - 1);
  48.         -- SET NOCOUNT ON added to prevent extra result sets from
  49.         -- interfering with SELECT statements.
  50.         SET NOCOUNT ON;
  51.  
  52.         -- Insert statements for procedure here
  53.         IF @Valencia = 'Artigo'
  54.             BEGIN
  55.                 SELECT vdal.Ano,
  56.                        V1.Cliente,
  57.                        V1.Nome,
  58.                        V1.TipoDocumento,
  59.                        V1.TipoDocumentoDescricao,
  60.                        V1.CodigoValencia,
  61.                        V1.DescricaoValencia,
  62.                        V1.SomaQuantidade_AnoN,
  63.                        V1.SomaPreco_AnoN,
  64.                        V2.SomaQuantidade_Anterior,
  65.                        V2.SomaPreco_Anterior,
  66.                        V2.AnoN_Anterior AS AnoAnterior
  67.                 FROM dbo.V_DA_ANOS_LOGISTICA AS vdal WITH(NOLOCK)
  68.                      LEFT JOIN
  69.                 (
  70.                     SELECT vdvpa.Ano AS AnoN,
  71.                            vdvpa.Artigo AS CodigoValencia,
  72.                            vdvpa.ArtigoDescricao AS DescricaoValencia,
  73.                            SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_AnoN,
  74.                            SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_AnoN,
  75.                            vdvpa.Cliente,
  76.                            vdvpa.Nome,
  77.                            vdvpa.TipoDocumento,
  78.                            vdvpa.TipoDocumentoDescricao
  79.                     FROM dbo.V_DA_VendasPorAno_Artigo AS vdvpa WITH(NOLOCK)
  80.                     GROUP BY vdvpa.Ano,
  81.                              vdvpa.Artigo,
  82.                              vdvpa.ArtigoDescricao,
  83.                              vdvpa.Cliente,
  84.                              vdvpa.Nome,
  85.                              vdvpa.TipoDocumento,
  86.                              vdvpa.TipoDocumentoDescricao
  87.                 ) V1 ON V1.AnoN = vdal.Ano
  88.                      LEFT JOIN
  89.                 (
  90.                     SELECT vdvpa.Ano AS AnoN_Anterior,
  91.                            vdvpa.Artigo,
  92.                            vdvpa.ArtigoDescricao,
  93.                            SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_Anterior,
  94.                            SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_Anterior
  95.                     FROM dbo.V_DA_VendasPorAno_Artigo AS vdvpa WITH(NOLOCK)
  96.                     GROUP BY vdvpa.Ano,
  97.                              vdvpa.Artigo,
  98.                              vdvpa.ArtigoDescricao
  99.                 ) V2 ON V2.AnoN_Anterior = vdal.Ano - 1
  100.                         AND V2.artigo = V1.CodigoValencia
  101.                 WHERE V1.Cliente IN
  102.                 (
  103.                     SELECT VALUE
  104.                     FROM STRING_SPLIT(@Clientes, ',')
  105.                 )
  106.                       AND V1.TipoDocumento IN
  107.                 (
  108.                     SELECT VALUE
  109.                     FROM STRING_SPLIT(@TipoDocumentos, ',')
  110.                 )
  111.                       AND ((@DataInicio IS NULL
  112.                             OR @DataFim IS NULL)
  113.                            OR (vdal.Ano BETWEEN YEAR(@DataInicio) AND YEAR(@DataFim)));
  114.         END;
  115.             ELSE
  116.             IF @Valencia = 'Familia'
  117.                 BEGIN
  118.                     SELECT vdal.Ano,
  119.                            V1.Cliente,
  120.                            V1.Nome,
  121.                            V1.TipoDocumento,
  122.                            V1.TipoDocumentoDescricao,
  123.                            V1.CodigoValencia,
  124.                            V1.DescricaoValencia,
  125.                            V1.SomaQuantidade_AnoN,
  126.                            V1.SomaPreco_AnoN,
  127.                            V2.SomaQuantidade_Anterior,
  128.                            V2.SomaPreco_Anterior,
  129.                            V2.AnoN_Anterior AS AnoAnterior
  130.                     FROM dbo.V_DA_ANOS_LOGISTICA AS vdal WITH(NOLOCK)
  131.                          LEFT JOIN
  132.                     (
  133.                         SELECT vdvpa.Ano AS AnoN,
  134.                                vdvpa.Familia AS CodigoValencia,
  135.                                vdvpa.FamiliaDescricao AS DescricaoValencia,
  136.                                SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_AnoN,
  137.                                SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_AnoN,
  138.                                vdvpa.Cliente,
  139.                                vdvpa.Nome,
  140.                                vdvpa.TipoDocumento,
  141.                                vdvpa.TipoDocumentoDescricao
  142.                         FROM dbo.V_DA_VendasPorAno_Familia AS vdvpa WITH(NOLOCK)
  143.                         GROUP BY vdvpa.Ano,
  144.                                  vdvpa.Familia,
  145.                                  vdvpa.FamiliaDescricao,
  146.                                  vdvpa.Cliente,
  147.                                  vdvpa.Nome,
  148.                                  vdvpa.TipoDocumento,
  149.                                  vdvpa.TipoDocumentoDescricao
  150.                     ) V1 ON V1.AnoN = vdal.Ano
  151.                          LEFT JOIN
  152.                     (
  153.                         SELECT vdvpa.Ano AS AnoN_Anterior,
  154.                                vdvpa.Familia,
  155.                                vdvpa.FamiliaDescricao,
  156.                                SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_Anterior,
  157.                                SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_Anterior
  158.                         FROM dbo.V_DA_VendasPorAno_Familia AS vdvpa WITH(NOLOCK)
  159.                         GROUP BY vdvpa.Ano,
  160.                                  vdvpa.Familia,
  161.                                  vdvpa.FamiliaDescricao
  162.                     ) V2 ON V2.AnoN_Anterior = vdal.Ano - 1
  163.                             AND V2.Familia = V1.CodigoValencia
  164.                     WHERE V1.Cliente IN
  165.                     (
  166.                         SELECT VALUE
  167.                         FROM STRING_SPLIT(@Clientes, ',')
  168.                     )
  169.                           AND V1.TipoDocumento IN
  170.                     (
  171.                         SELECT VALUE
  172.                         FROM STRING_SPLIT(@TipoDocumentos, ',')
  173.                     )
  174.                           AND ((@DataInicio IS NULL
  175.                                 OR @DataFim IS NULL)
  176.                                OR (vdal.Ano BETWEEN YEAR(@DataInicio) AND YEAR(@DataFim)));
  177.             END;
  178.                 ELSE
  179.                 IF @Valencia = 'Marca'
  180.                     BEGIN
  181.                         SELECT vdal.Ano,
  182.                                V1.Cliente,
  183.                                V1.Nome,
  184.                                V1.TipoDocumento,
  185.                                V1.TipoDocumentoDescricao,
  186.                                V1.CodigoValencia,
  187.                                V1.DescricaoValencia,
  188.                                V1.SomaQuantidade_AnoN,
  189.                                V1.SomaPreco_AnoN,
  190.                                V2.SomaQuantidade_Anterior,
  191.                                V2.SomaPreco_Anterior,
  192.                                V2.AnoN_Anterior AS AnoAnterior
  193.                         FROM dbo.V_DA_ANOS_LOGISTICA AS vdal WITH(NOLOCK)
  194.                              LEFT JOIN
  195.                         (
  196.                             SELECT vdvpa.Ano AS AnoN,
  197.                                    vdvpa.Marca AS CodigoValencia,
  198.                                    vdvpa.MarcaDescricao AS DescricaoValencia,
  199.                                    SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_AnoN,
  200.                                    SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_AnoN,
  201.                                    vdvpa.Cliente,
  202.                                    vdvpa.Nome,
  203.                                    vdvpa.TipoDocumento,
  204.                                    vdvpa.TipoDocumentoDescricao
  205.                             FROM dbo.V_DA_VendasPorAno_Marca AS vdvpa WITH(NOLOCK)
  206.                             GROUP BY vdvpa.Ano,
  207.                                      vdvpa.Marca,
  208.                                      vdvpa.MarcaDescricao,
  209.                                      vdvpa.Cliente,
  210.                                      vdvpa.Nome,
  211.                                      vdvpa.TipoDocumento,
  212.                                      vdvpa.TipoDocumentoDescricao
  213.                         ) V1 ON V1.AnoN = vdal.Ano
  214.                              LEFT JOIN
  215.                         (
  216.                             SELECT vdvpa.Ano AS AnoN_Anterior,
  217.                                    vdvpa.Marca,
  218.                                    vdvpa.MarcaDescricao,
  219.                                    SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_Anterior,
  220.                                    SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_Anterior
  221.                             FROM dbo.V_DA_VendasPorAno_Marca AS vdvpa WITH(NOLOCK)
  222.                             GROUP BY vdvpa.Ano,
  223.                                      vdvpa.Marca,
  224.                                      vdvpa.MarcaDescricao
  225.                         ) V2 ON V2.AnoN_Anterior = vdal.Ano - 1
  226.                                 AND V2.Marca = V1.CodigoValencia
  227.                         WHERE V1.Cliente IN
  228.                         (
  229.                             SELECT VALUE
  230.                             FROM STRING_SPLIT(@Clientes, ',')
  231.                         )
  232.                               AND V1.TipoDocumento IN
  233.                         (
  234.                             SELECT VALUE
  235.                             FROM STRING_SPLIT(@TipoDocumentos, ',')
  236.                         )
  237.                               AND ((@DataInicio IS NULL
  238.                                     OR @DataFim IS NULL)
  239.                                    OR (vdal.Ano BETWEEN YEAR(@DataInicio) AND YEAR(@DataFim)));
  240.                 END;
  241.                     ELSE
  242.                     IF @Valencia = 'Zona'
  243.                         BEGIN
  244.                             SELECT vdal.Ano,
  245.                                    V1.Cliente,
  246.                                    V1.Nome,
  247.                                    V1.TipoDocumento,
  248.                                    V1.TipoDocumentoDescricao,
  249.                                    V1.CodigoValencia,
  250.                                    V1.DescricaoValencia,
  251.                                    V1.SomaQuantidade_AnoN,
  252.                                    V1.SomaPreco_AnoN,
  253.                                    V2.SomaQuantidade_Anterior,
  254.                                    V2.SomaPreco_Anterior,
  255.                                    V2.AnoN_Anterior AS AnoAnterior
  256.                             FROM dbo.V_DA_ANOS_LOGISTICA AS vdal WITH(NOLOCK)
  257.                                  LEFT JOIN
  258.                             (
  259.                                 SELECT vdvpa.Ano AS AnoN,
  260.                                        vdvpa.Zona AS CodigoValencia,
  261.                                        vdvpa.ZonaDescricao AS DescricaoValencia,
  262.                                        SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_AnoN,
  263.                                        SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_AnoN,
  264.                                        vdvpa.Cliente,
  265.                                        vdvpa.Nome,
  266.                                        vdvpa.TipoDocumento,
  267.                                        vdvpa.TipoDocumentoDescricao
  268.                                 FROM dbo.V_DA_VendasPorAno_Zona AS vdvpa WITH(NOLOCK)
  269.                                 GROUP BY vdvpa.Ano,
  270.                                          vdvpa.Zona,
  271.                                          vdvpa.ZonaDescricao,
  272.                                          vdvpa.Cliente,
  273.                                          vdvpa.Nome,
  274.                                          vdvpa.TipoDocumento,
  275.                                          vdvpa.TipoDocumentoDescricao
  276.                             ) V1 ON V1.AnoN = vdal.Ano
  277.                                  LEFT JOIN
  278.                             (
  279.                                 SELECT vdvpa.Ano AS AnoN_Anterior,
  280.                                        vdvpa.Zona,
  281.                                        vdvpa.ZonaDescricao,
  282.                                        SUM(ISNULL(vdvpa.Quantidade, 0)) SomaQuantidade_Anterior,
  283.                                        SUM(ISNULL(vdvpa.PrecoTotal, 0)) SomaPreco_Anterior
  284.                                 FROM dbo.V_DA_VendasPorAno_Zona AS vdvpa WITH(NOLOCK)
  285.                                 GROUP BY vdvpa.Ano,
  286.                                          vdvpa.Zona,
  287.                                          vdvpa.ZonaDescricao
  288.                             ) V2 ON V2.AnoN_Anterior = vdal.Ano - 1
  289.                                     AND V2.Zona = V1.CodigoValencia
  290.                             WHERE V1.Cliente IN
  291.                             (
  292.                                 SELECT VALUE
  293.                                 FROM STRING_SPLIT(@Clientes, ',')
  294.                             )
  295.                                   AND V1.TipoDocumento IN
  296.                             (
  297.                                 SELECT VALUE
  298.                                 FROM STRING_SPLIT(@TipoDocumentos, ',')
  299.                             )
  300.                                   AND ((@DataInicio IS NULL
  301.                                         OR @DataFim IS NULL)
  302.                                        OR (vdal.Ano BETWEEN YEAR(@DataInicio) AND YEAR(@DataFim)));
  303.                     END;
  304.     END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement