none
Problemas para fazer a atualição de uma table temporaria. RRS feed

  • Pergunta

  • Fala galera! estou com um problema grande :/ Estava com problema de granulação de tive que fazer uma table temporaria para obter os resultados de outras tabelas. Pois bem, eu criei a tabela temporaria:

    "select Nome, Codigo, sum (Valor_Auditoria) as Auditoria, sum(Valor_Reducaoz) as Reducaoz, sum(Valor_Vendas) as Vendas, sum(Quantidade) as Quantidade from Temporario group by Nome, Codigo, Data";  (Esse é o select da tabela temporaria [Que na verdade não é mais temporaria, pois não vou deleta, queria apenas deletar as linhas dela])

    o problema é que toda vez que eu chamar essa tela (Pop-up que mostra um reportviewer) eu tenho que limpar os dados da consulta anterior e preenche-la de acordo com os parametros de data.

                    <asp:SessionParameter Name="DataInicial" SessionField="DataInicial" Type="DateTime" />
                    <asp:SessionParameter Name="DataFinal" SessionField="DataFinal" Type="DateTime" />
                    <asp:SessionParameter Name="Shopping" SessionField="Shop_Select" Type="Int32" />
                    <asp:SessionParameter Name="Loja" SessionField="Loja" Type="String" />

    E as variaveis do insert para preencher novamente a tabela seriam:

    string InserAudi;

                        InserAudi = "insert into temporario(Nome,Codigo, Valor_Auditoria, Quantidade) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";

                       

                        string InserVenda;

                        InserVenda = "insert into Temporario (Nome,Codigo, Valor_Vendas) select Nome_Loja,L.Codigo_Loja, ValorVenda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";

                       

                        string InserRedu;

                        InserRedu = "insert into temporario (Nome,Codigo, Valor_ReducaoZ) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";

    Sou iniciante em ADO.NET e estou confundindo muito, principalmente essa coisa de DELETE. Alguém poderia me ajudar nessa rotina para deletar todos os dados da string "SELECT" Toda vez que a pop-up for iniciada? Ja procurei em apostilas, mas nada me ajuda :/


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 14:51

Respostas

  • Olá Claudio,

    Na procedure que criamo ontem estavamos inserindo os dados em uma variável tabela. Ela é temporária e só existe no escopo da procedure, assim como qualquer outra variável. Então não existe o risco dela ficar cheia demais ou não.

    Pode-se sim incluir e agrupar o valor de cada transação por sua data.

    A procedure neste caso ficaria assim:

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataInicial DATETIME,
        @DataFinal DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int,
      Data DateTime
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data)
    select     Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    UNION ALL
    select     Nome_Loja, L.Codigo_Loja, 0.0,     0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and  L.Codigo_Shop = @Shopping
    UNION ALL
    select     Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas 
    group by Nome_Loja,Codigo_Loja
    END GO

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Claudio 007-006 quinta-feira, 12 de julho de 2012 16:17
    • Não Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
    • Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
    quinta-feira, 12 de julho de 2012 14:23
    Moderador
  • Olá Claudio,

    No report vc esta passando a data 31/06/2012, essa data não existe. Junho vai só até o dia 30.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Claudio 007-006 sexta-feira, 10 de agosto de 2012 13:46
    sexta-feira, 10 de agosto de 2012 13:33
    Moderador

Todas as Respostas

  • Fala galera, boa noite!! Seguinte, eu estou trabalhando em um relatório em reportviewer, cheguei a pedir ajuda quanto a minha Query, mas a única maneira de pegar os dados que eu preciso para o meu relatório foi criando uma tabela e preencher essa tabela com os dados de outras quatro tabelas... Deixa eu fazer um exemplo melhor:

    Tab_Venda1 (um tipo de venda específica)

    Tab_venda2 (Outro tipo)

    Tab_venda3 (Outro tipo)

    Tab_Loja (referência de nome das lojas e código das lojas)

    Dessas 4 tabelas eu criei a tabela "temporaria" que contem somente as colunas de vendas dessas três tabelas, a coluna quantidade, a coluna código da loja e nome da loja.

    A ideia é simples, por cada setor vão ser lançados valores de vendas para a cada loja. No final do mês o responsável terá acesso aos 3 valores das lojas e poderá verificar se há divergência quanto o valor total.

    Bem, até aí ok. Eu fiz o reportviwer e ele mostra o valor que está guardado no banco (abre tudo certinho) agora eu preciso criar uma rotina em ASP.NET para que, ao ser chamado na "PaginaRelatorios.aspx" ele atualize a tabela "temporaria" com os dados selecionados das outras 4 tabelas.

    Eu pensei em fazer no C#, mas parece que a unica maneira é carregar os dados diretamente no servidor... Não tenho muito conhecimento em ASP.NET, estou lendo uma apostila... será que podem me ajudar?

    A query de update seria essa:

      <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:CnnString %>"
                SelectCommand="UPDATE temporario(Nome,Codigo, Valor_Auditoria, Quantidade) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = 'id_loja' and Codigo_Shop= 'Shop_Select' and Data_Auditoria = 'DataInicial' and 'DataFinal'
                UPDATE Temporario (Nome,Codigo, Valor_Vendas) select Nome_Loja,L.Codigo_Loja, ValorVenda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = 'id_loja' and Codigo_Shop = 'Shop_Select'  and Data_Venda = 'DataInicial' and 'DataFinal'
                UPDATE temporario (Nome,Codigo, Valor_ReducaoZ) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = 'id_loja' and Codigo_Shop = 'Shop_Select' Redu_DT_DataVenda = 'DataInicial' and 'DataFinal'
                ">
            </asp:SqlDataSource>

    Desde já agradeço o apoio!


    Assunto = dúvida

    terça-feira, 3 de julho de 2012 00:32
  • Olá Cláudio, Tudo bem?

    Neste caso, o que eu faria, seria não utilizar um objeto SQLDAtaSource.

    Neste cenário acredito que o melhor seja utilizar os objetos do ADO.Net para se conectar no banco de dados e executar seus UPDATES.

    Vc pode fazer isso assim:

    protected void btnSave_Click(object sender, EventArgs e)
    {
        ExecuteCommand("UPDATE temporario(Nome,Codigo, Valor_Auditoria, Quantidade)...");
        ExecuteCommand("UPDATE temporario(Nome,Codigo, Valor_Auditoria, Quantidade)...");
        ExecuteCommand("UPDATE temporario (Nome,Codigo, Valor_ReducaoZ)...");
    }
    private static void ExecuteCommand(string sqlCommand)
    {
        using (SqlConnection connection = new SqlConnection("SUA CONNECTION STRING")
        {
            SqlCommand command = new SqlCommand(sqlCommand, connection);     
    	try
    	{ 
            	connection.Open();
            	command.ExecuteNonQuery();
    	}
    	catch(Exception ex)
    	{
    		// Seu tratamento de erros
    	}
    	finally
    	{
            	connection.Close();
    	}
        }
    }

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 3 de julho de 2012 02:22
    Moderador
  • Bom dia Fernando! Então, o problema é que por ser um reportviwer não posso add botões para atualizar a página. Existe uma página com os nomes das reports, e ela chama o .aspx das reports... Isso que tá sendo um maior incomodo. Ele precisar atualizar direto no ASPX... :/

    Assunto = dúvida

    terça-feira, 3 de julho de 2012 13:15
  • Olá Claudio,
    Tudo beleza?

    Nesse caso vc pode adicionar o código acima no Form Load da sua página. Irá executar o mesmo comportamento do SqlDataSource.

    Essas páginas que abrem os Reports, elas tem algumas querystring? Vc passa algum parâmetro para elas?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 3 de julho de 2012 13:28
    Moderador
  • Fernando, mas esse modelo seria aquele em que a conexão do projeto com o banco de dados não é direta, certo? Tipo, a minha conexão já declarada na web config (contínua), não dá pra criar outra conexão, certo?

    Assunto = dúvida

    terça-feira, 3 de julho de 2012 18:07
  • Olá Claudio,

    Vc pode aproveitar a conexão que esta no seu web.Config, basta vc fazer referência a DLL System.Configuration e depois utilizar o código abaixo para resgatar sua connection string:

    string cs = System.Configuration.ConfigurationManager

    .ConnectionString["NOME DA SUA CONNECTION STRING NO WEB.CONFIG"].ConnectionString;

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil



    terça-feira, 3 de julho de 2012 19:31
    Moderador
  • Bom dia Fernando! Entendi :D Vai ajudar muito!!

    Cara, seguinte, eu tive a seguinte ideia agora.... Bem, na reportviewer eu não to conseguindo chamar o update para alimentar a tabela "temporario" como tinha dito no início. Então queria criar uma rotina que ao clicar no botão ela fosse acionada :) Vou tentar aqui... Mas brigadão pelo apoio!


    Assunto = dúvida

    quarta-feira, 4 de julho de 2012 13:42
  • Cara, não querendo abusar, mas será que vc sabe uma maneira de ativar um comando (para fazer os updates) no asp.net quando o clicarem em uma label do aspx.cs?

    Assunto = dúvida

    quarta-feira, 4 de julho de 2012 13:48
  • Olá grande Claudio,

    Não esta abusando de maneira alguma.

    Neste caso, o label não possui evento Click. Mas, um controle parecido é o HyperLinkButton, que possui evento Click.

    Acredito que vc pode utilizá-lo neste caso.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quarta-feira, 4 de julho de 2012 14:03
    Moderador
  • xD Descobri o comando, agora vou testar :) Mais uma vez, obrigado pelo apoio!

    Assunto = dúvida

    quarta-feira, 4 de julho de 2012 14:04
  • Beleza!

    O que precisar é só falar :)

    Podemos fechar esta thread?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quarta-feira, 4 de julho de 2012 14:11
    Moderador
  • Se importa se eu fazer ele rodar primeiro? :) Estou trabalhando nisso

    Assunto = dúvida

    quarta-feira, 4 de julho de 2012 14:22
  • Fernando, a ideia saiu pela culatra... Bem, o esquema é o seguinte, estou com problemas na minha query, portanto tive que criar a tabela temporario para receber o valor da consulta das outras tabelas.

    Bem, terei que deletar essa tabela toda vez que ela for consultada, criando-a novamente para que Ela Receba os resultados dos inserts:

    INSERT INTO temporario (Nome,Codigo, Valor_Reducao) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja and Codiand Redu_DT_DataVenda = @DataInicial and @DataFinal and L.Codigo_Shop = @Shopping

    (São 3dataset como esse... Um que alimente a coluna Reducao, outro a coluna "Vendas" e outro a coluna "Auditoria")

    O problema é que não tenho ideia de como criar uma rotina que delete a tabela:

    create table temporario
    (
    Nome nvarchar (70),
    Codigo int,
    Valor_Auditoria money,
    Valor_Vendas money,
    Valor_ReducaoZ money,
    Quantidade int
    )

    E que depois a reconstrua e que possa receber os INSERT novamente .. Passei a manhã procurando em foruns e não achei... Por um acaso poderia me ajudar com isso?


    Assunto = dúvida

    quarta-feira, 4 de julho de 2012 16:28
  • Olá Claudio,

    Vc realmente precisa apagar a tabela? Se vc apagar apenas os registros não é suficiente?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quinta-feira, 5 de julho de 2012 14:19
    Moderador
  • Olá Claudio,

    O comando "DELETE FROM TEMPORARIO" apagando todos os registros não te ajuda?

    Vc quer pagar apenas os dados de algumas colunas?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 14:55
    Moderador
  • Seria sim, até mais facil.... mas não to conseguindo usar o delete devidamente.

    Segue minha select: 

    select Nome, Codigo, sum (Valor_Auditoria) as Auditoria, sum(Valor_Reducaoz) as Reducaoz, sum(Valor_Vendas) as Vendas, sum(Quantidade) as Quantidade from Temporario group by Nome, Codigo, Data"

    Essa é a select da tabela que tenho que deletar os dados quando a pop-up da reportviewer for aberta;

                        string InserAudi;

                        InserAudi = "insert into temporario(Nome,Codigo, Valor_Auditoria, Quantidade) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";

                       

                        string InserVenda;

                        InserVenda = "insert into Temporario (Nome,Codigo, Valor_Vendas) select Nome_Loja,L.Codigo_Loja, ValorVenda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";

                       

                        string InserRedu;

                        InserRedu = "insert into temporario (Nome,Codigo, Valor_ReducaoZ) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";

     E esses são as insert's que devem ser carregadas, logo apos deletar a row com os dados da consulta anterior... Tipo, o cara clica no link do Relatorio e antes de carregar os dados, ele precisa fazer o delete e o insert... meu, tentei 1000 coisas e nada :/ Tem ideia??


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 15:02
  • Teria que ser de todas as colunas, pois elas serão preenchidas com novos dados.

    Então eu apago Nome, código, auditoria, valor, reducaoZ, quantidade e faço um insert de acordo com os parametros.


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 15:06
  • Olá Claudio,

    Acredito que neste caso, o melhor a se fazer seja incluir os campos Codigo_Shop e Redu_DT_DataVenda na tabela de temporario, e depois utilizar os mesmos parâmetros @shopping, @datainicial, @datafinal e @loja para apagar os registros da tabela Temporario.

    O que acha?

    Esta solução é melhor do que criar um comando DELETE cheio de JOINs.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 15:13
    Moderador
  • o problema é que é uma tabela que recebe os dados de outras 4 tabelas. Eu tentei fazer o select com os JOIN com as 4, mas, como meu professor diz, deu um problema de granulação e os dados não eram corretos, eles se multiplicavam loucamente. Então, o unico modo de obter os dados é criando uma tabela intermediaria que recebe valor da tabela reducao, vendas, auditoria, loja. E nela preencher as colunas devidas de cada uma dessas, entende?

    Então meio que nao ha outra saída (E olha que pesquisei muitoo rs) essa foi a mais fácil e eficaz, creio..


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 15:18
  • Olá Claudio,

    Esse tipo de tabela auxiliar nunca é a melhor saída, pois é uma tabela que não se relaciona com as demais, possui dados repetidos (pois as demais tabelas também contém estes dados) e sua existência pode ser substituida por outros recursos do banco de dados.

    Talvez, a melhor solução neste caso, fosse criar uma stored procedure que organizasse esses INSERTs em variáveis tabela, ou outros recursos do SQL e então retornasse estes dados ao invocador na procedure,  não deixando registro físico de sua execução, isto é, não deixando seus resultado em alguma tabela por ai.

    Mas no seu caso, pelo que analisei a query do seu Insert, acredito que vc pode incluir os campos que comentei, pois eles estão relacionados a cada tupla que retorna de sua consulta, e não acredito que a quantidade de registros irá aumentar devido a inclusão destes campos que estão funcionando como critério de seleção da sua query.

    Vc esta executando alguma procedure? Se sim, poderia postar o código dela? Quem sabe não alteramos o seu código e não precisamos mais dessa tabela ;)

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 15:31
    Moderador
  • xD nem, ainda nem sei fazer select direito, quem dera fazer uma procedure... Estou trabalhando com o que tenho em mãos. Como eu faria essa procedure??

    Assunto = dúvida

    terça-feira, 10 de julho de 2012 15:35
  • Neste modo que estamos comentando, assim não seria possível concluir o serviço, só para colocá-lo no ar o quanto antes, assim me daria tempo de aprender sobe Procedure e fazer as devidas melhorias.

    Assunto = dúvida

    terça-feira, 10 de julho de 2012 15:36
  • Olá Claudio,

    Bem, diante do problema tempo... Acredito que a solução mais rápida é aquela que lhe disse sobre criar aquelas colunas na tabela. A quantidade de registros não irá alterar, pois vc esta incluindo novas colunas e não esta incluindo uma nova tabela para fazer novos joins e não esta utilizando nenhum critério de agrupamento.

    Depois de adicionados os campos que comentei, vc terá de modificar os INSERTS que populam a sua tabela.

    E por fim, terá de criar o comando DELETE para apagar aqueles dados, passando os mesmos parâmetros que esta utilizando para fazer a consulta do INSERT.

    Mas, a melhor solução, seria criar a procedure que comentei.

    Veja abaixo um esboço de como ela seria:

    CREATE PROC spTesteConsulta
    	@Loja INT,
    	@Shopping INT,
    	@DataFinal DATETIME,
    	@DataInicial DATETIME
    AS
    BEGIN
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    UNION
    select Nome_Loja, L.Codigo_Loja, ValorVenda, 0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    UNION 
    select Nome_Loja, L.Codigo_Loja, Redu_VL_ValorVenda, 0 from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    END
    GO
    EXEC spTesteConsulta 0, 0, '2012/01/01 00:00:00', '2012/02/01 00:00:00'
    GO

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 15:43
    Moderador
  • Veja, o Codigo_Loja faz parte do Query para alimentar a tabela no xsd.

    SELECT        Nome, Codigo, SUM(Valor_Auditoria) AS Auditoria, SUM(Valor_ReducaoZ) AS Reducaoz, SUM(Valor_Vendas) AS Vendas, SUM(Quantidade) AS Quantidade
    FROM            temporario
    WHERE        EXISTS
                                 (SELECT        A.Data_Auditoria, V.Data_Venda, R.Redu_DT_DataVenda
                                   FROM            Tab_Auditoria AS A INNER JOIN
                                                             Tab_Vendas AS V ON A.Data_Auditoria = V.Data_Venda AND A.Codigo_Loja = V.Codigo_Loja INNER JOIN
                                                             Tab_ReducaoZ AS R ON R.Redu_DT_DataVenda = A.Data_Auditoria AND R.Redu_ID_Loja = A.Codigo_Loja
                                   WHERE        (A.Data_Auditoria = @DataInicial) AND (A.Data_Auditoria = @DataFinal) AND (A.Codigo_Loja = @Loja) AND (V.Codigo_Shop = @Shopping))
    GROUP BY Nome, Codigo, Data


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 15:50
  •   Fernando, eu fiz algumas modficações na sua Procedure... Ela é ótima! ela me trouxe os dados... Porém, com um pequeno problema:


    Loja Teste 01    1    899.00    18
    Loja Teste 01    1    974.70    0
    Loja Teste 01    1    1331.30    0

    Não consigo colocar os valores em uma linha só e com os nomes devidos... Só aparece "Valor_Auditado", os outros valores ficam na mesma coluna... E para que serve os  ", 0" na select??


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 16:21
  • Olá Claudio,

    Veja se assim a procedure fica melhor.

    Acredito que ela irá resolver várias questões que vc precisa.

    ALTER PROC spTesteConsulta
    	@Loja INT,
    	@Shopping INT,
    	@DataFinal DATETIME,
    	@DataInicial DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE 
    (
      Nome_Loja int, 
      Codigo_Loja varchar(80),
      Valor_Auditado decimal(17,2),
      Qtd_Item int,
      ValorVenda decimal(17,2),
      Redu_VL_ValorVenda decimal(17,2)
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda)
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    UNION
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    UNION 
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    select 
    	Nome_Loja, 
    	Codigo_Loja, 
    	SUM(Valor_Auditado), 
    	SUM(Qtd_Item), 
    	SUM(ValorVenda), 
    	SUM(Redu_VL_ValorVenda)
    from 
    	@vendas 
    group by 
    	Nome_Loja, 
    	Codigo_Loja,
    END
    GO

    Talvez eu possa ter errado algo na sintaxe ou nos tipos de dados. Vc pode corrigir qualquer problema que possa aparecer com relação a isso...

    Nesta procudure estou utilizando uma variável tabela. Esse código poderia ficar melhor se existisse alguma chave de relacionamento entre suas tabelas de vendas.

    O ",0 " e o ", 0.0" servem para simular valores em colunas que não existem nas demais tabelas.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 16:57
    Moderador
  • Loja Teste 01    1    13,00    1231,30    974,70    799

    O valor aparece errado tbm na procedure :/


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 17:55
  • Olá Claudio,

    Qual dos valores aparecem errados?

    Qual o comportamento deste relatório?

    ALTER PROC spTesteConsulta
    	@Loja INT,
    	@Shopping INT,
    	@DataFinal DATETIME,
    	@DataInicial DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE 
    (
      Nome_Loja int, 
      Codigo_Loja varchar(80),
      Valor_Auditado decimal(17,2),
      Qtd_Item int,
      ValorVenda decimal(17,2),
      Redu_VL_ValorVenda decimal(17,2)
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda)
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping
    select 
    	Nome_Loja, 
    	Codigo_Loja, 
    	SUM(Valor_Auditado), 
    	SUM(Qtd_Item), 
    	SUM(ValorVenda), 
    	SUM(Redu_VL_ValorVenda)
    from 
    	@vendas 
    group by 
    	Nome_Loja, 
    	Codigo_Loja,
    END

    Tente executar agora.

    Dê mais dados sobre o funcionamento da relatório e sobre quais dados devem ser retornados.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 18:00
    Moderador
  • Então, eu tive que fazer umas modificações:

    CREATE PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataFinal DATETIME,
        @DataInicial DATETIME
    AS
    BEGIN
    select Nome_Loja, L.Codigo_Loja, sum(Valor_Auditado) as Valor_Auditado, sum (Qtd_Item) as Quantidade from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012/06/08' and l.Codigo_Shop = '1'
    group by Nome_Loja, L.Codigo_Loja
    union
    select Nome_Loja, L.Codigo_Loja, sum(ValorVenda) as Valor_Venda, 0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012/06/08' and  l.Codigo_Shop = '1'
    group by Nome_Loja, L.Codigo_Loja
    union
    select Nome_Loja, L.Codigo_Loja, sum(Redu_VL_ValorVenda) as ReducaoZ, 0 from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012/06/08'  and l.Codigo_Shop = '1'
    group by Nome_Loja, L.Codigo_Loja
    END
    GO
    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataFinal DATETIME,
        @DataInicial DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80),
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Qtd_Item,Valor_Auditado, ValorVenda, Redu_VL_ValorVenda)
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012-06-08' and L.Codigo_Shop = '1'
    UNION
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and  L.Codigo_Shop = '1'
    UNION
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012-06-08' and L.Codigo_Shop = '1'

    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado), SUM(ValorVenda), SUM(Redu_VL_ValorVenda), SUM(Qtd_Item) from @vendas
    group by Nome_Loja,Codigo_Loja
    END
    GO

    O resultado que devia aparecer era:

    Loja Teste 01    1    899.00    974.70   1331.30 18

    e o que ele está me dando é:

    Loja Teste 01    1    13,00    1231,30    974,70    799


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 18:04
  • Olá Claudio,

    Existia um campo na posição errada do INSERT e troquei o UNION por um UNION ALL.

    Veja se agora resolve.

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataFinal DATETIME,
        @DataInicial DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE 
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int
    )
    INSERT INTO @vendas (	Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda)
    select 	Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012-06-08' and L.Codigo_Shop = '1'
    UNION ALL
    select 	Nome_Loja, L.Codigo_Loja, 0.0, 	0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and  L.Codigo_Shop = '1'
    UNION ALL
    select 	Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012-06-08' and L.Codigo_Shop = '1'
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado), SUM(ValorVenda), SUM(Redu_VL_ValorVenda), SUM(Qtd_Item) from @vendas 
    group by Nome_Loja,Codigo_Loja
    END
    GO

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 18:14
    Moderador
  • Loja Teste 01    1    899,00    1331,30    974,70    18

    PERFEITO! \o Me ajudou muito! Agora que vi a utilidade da Procedure, irei aprender ela o quanto antes!!! Agora eu só modifico os parametros e modifico a query pela procedure ^^

    Tipo, como usa o SUM, sempre terá apenas 1 linha... Tem como criar uma PROCEDURE que exclua essa linha antes de carregar os outros parametros (de data) que preencher a tabela?


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 18:27
  • Existe essa possibilidade? ou só criando uma rotina?

    Assunto = dúvida

    terça-feira, 10 de julho de 2012 18:27
  • Olá Claudio,

    Que bom que funcionou.

    Não entendi sua pergunta.

    Na verdade, o seu SUM esta retornando um único resultado por vez por conta do filtro de código da loja, se vc remover este filtro vera que o resultado retornado será a somatoria de diversas lojas.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 18:30
    Moderador
  • Entendi, é, ele vai somar todos os valores daquele codigo, certo?

    Eu fui mudar a Query para a Procedure, e ela executa perfeitamente, eu adicionei os parâmetros e tal. Porém, antes de finalizar o wizard ele alega um problema (Que não aparece na Query Builder):

    Unable to parse Query Text

    Sabe o que poderia ser esse erro??


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 19:00
  • Olá Claudio,

    Vc poderia postar o código que esta colocando no Query Builder?

    Se eu não me engano, o query builder tem uma opção só para stored procedures onde vc apenas informa o nome da procedure.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 19:18
    Moderador
  • CREATE PROC spTesteConsulta @Loja INT, @Shopping INT, @DataFinal DATETIME, @DataInicial DATETIME AS BEGIN SELECT        Nome_Loja, L.Codigo_Loja,
                                                                                                                                                                                                                                                                                                 sum(Valor_Auditado) AS Valor_Auditado,
                                                                                                                                                                                                                                                                                                 sum(Qtd_Item) AS Quantidade
                                                                                                                                                                                                                                                                        FROM            Tab_Auditoria AS A INNER JOIN
                                                                                                                                                                                                                                                                                                 Tab_Loja AS L ON
                                                                                                                                                                                                                                                                                                 A.Codigo_Loja = L.Codigo_Loja
                                                                                                                                                                                                                                                                        WHERE        L.Codigo_Loja = @Loja AND
                                                                                                                                                                                                                                                                                                 Data_Auditoria = @DataInicial AND
                                                                                                                                                                                                                                                                                                 Data_Auditoria = @DataFinal AND
                                                                                                                                                                                                                                                                                                 l.Codigo_Shop = @Shopping
                                                                                                                                                                                                                                                                        GROUP BY Nome_Loja, L.Codigo_Loja
    UNION
    SELECT        Nome_Loja, L.Codigo_Loja, sum(ValorVenda) AS Valor_Venda, 0
    FROM            Tab_Vendas AS V INNER JOIN
                             Tab_Loja AS L ON V.Codigo_Loja = L.Codigo_Loja
    WHERE        L.Codigo_Loja = @Loja AND Data_Venda = @DataInicial AND Data_Venda = @DataFinal AND l.Codigo_Shop = @Shopping
    GROUP BY Nome_Loja, L.Codigo_Loja
    UNION
    SELECT        Nome_Loja, L.Codigo_Loja, sum(Redu_VL_ValorVenda) AS ReducaoZ, 0
    FROM            Tab_ReducaoZ AS R INNER JOIN
                             Tab_Loja AS L ON R.Redu_ID_Loja = L.Codigo_Loja AND L.Codigo_Loja = @Loja AND Redu_DT_DataVenda = @DataInicial AND
                             Redu_DT_DataVenda = @DataFinal AND l.Codigo_Shop = @Shopping
    GROUP BY Nome_Loja, L.Codigo_Loja

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataFinal DATETIME,
        @DataInicial DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80),
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda)
    select     Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012-06-08' and L.Codigo_Shop = '1'
    UNION ALL
    select     Nome_Loja, L.Codigo_Loja, 0.0,     0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and  L.Codigo_Shop = '1'
    UNION ALL
    select     Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012-06-08' and L.Codigo_Shop = '1'
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens from @vendas
    group by Nome_Loja,Codigo_Loja

    END GO

    Assunto = dúvida

    terça-feira, 10 de julho de 2012 19:30
  • Sobre os parametros  L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and  L.Codigo_Shop = '1'  eu troquei pelos parametros.

    Assunto = dúvida

    terça-feira, 10 de julho de 2012 19:34
  • Olá Claudio,

    Na verdade vc não precisa colocar todo este código no Query Builder, pois ele é executado apenas no servidor de banco de dados.

    Vc deve colocar no query builder apenas a chamada a procedure. Algo como:

    EXEC spTesteConsulta 

    Se eu não me engano os parâmetros são identificados sozinhos.

    Outro ponto, spTesteConsulta não é um bom nome, quando for possível altere o nome desta procedure.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 10 de julho de 2012 19:40
    Moderador
  • Muito obrigado pelo apoio Fernando! Agradeço a atenção :D Amanhã testarei o código, estou animado e hoje msm começo a estudar a PROCEDURE, e como ela funciona.Boa tarde!!


    Assunto = dúvida

    terça-feira, 10 de julho de 2012 19:47
  • Boa tarde Fernando!

    Bem, eu praticamente reconstrui a minha Rdlc. E gostaria de pedir auxilio novamente. Na parte  da setagem. Não estou conseguindo capturar as datas, estou fazendo os testes como uma query sql, com ela vai... Como tenho que inserir os valores pelas datas e mostrar os valores referentes aquelas datas, não sei se tenho que criar uma coluna para armazenar as datas da tab_ReducaoZ, Tab_Vendas e Tab_Auditoria.

    Os parâmetros critério para trazer os resultados do banco:

                    <SelectParameters>
                    <asp:SessionParameter Name="DataInicial" SessionField="DataInicial" Type="DateTime" />
                    <asp:SessionParameter Name="DataFinal" SessionField="DataFinal" Type="DateTime" />
                    <asp:SessionParameter Name="Shopping" SessionField="Shop_Select" Type="String" />
                    <asp:SessionParameter Name="Loja" SessionField="Loja" Type="String" />
                    </SelectParameters>

    Desde já, agradeço a atenção ;D


    Assunto = dúvida

    quarta-feira, 11 de julho de 2012 16:56
  • Desculpa a confusão...

    Acho que agora entendi o erro... Nos parametros de data, se eu coloco a data inicial e a data final iguais, ele me traz os resultados certos, porém, se eu testo com datas diferentes, por exemplo: 2012-06-01 e 2012-06-08 ele mostra esse erro na Preview Data:

    TYPE     VALUE

    int32        0

    Ou seja, ele não tá somando com valores de datas de outros dias, certo?


    Assunto = dúvida

    quarta-feira, 11 de julho de 2012 18:29
  • Olá Claudio,

    Poderia dar um print screen no erro e no query builder onde passa os parâmetros?
    Qual o comportamento da procedure quando vc passa data diferentes?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quarta-feira, 11 de julho de 2012 20:14
    Moderador
  •  Bom dia, Fernando!

     Segue as prints:

    Nesse caso a Data está diferente: '2012-06-06' e '2012-06-06' E então acontece esse erro. Eu fiz o teste no banco de dados para a mesma consulta (Loja = 6 no shopping = 3) e para ambas as datas apareceram valores, mas ainda que não houvesse valor na data, a ideia era que o valor que falta ficasse nulo.

     


    Assunto = dúvida

    quinta-feira, 12 de julho de 2012 13:44
  • Olá Claudio,

    Poste o código da sua procedure como ele esta hoje. Vou colocar um comando between entre as datas e as variáveis e resolveremos o problema.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quinta-feira, 12 de julho de 2012 13:49
    Moderador
  • Espero que a imagem não tenha ficado confusa... Aqui estou buscando os dados para verificar se nas datas há mesmo valores para ambos os dias na tabela para a loja e o shopping em questão.

    Por pegar o resultado de datas diferentes e preencher na tabela, não haveria como deletar os valores que ficaram na tabela após a consulta? pois chegará uma hora que de tanto insert into a tabela ficará monstruosamente grande!! xD Por exemplo, o cliente chamou a reportViewer, aí a procedure traz os resultados de acordo com a data e loja, e após carregar os dados na tabela, já realizar um delete? Eu pensei em tentar colocar o delete após a INSERT INTO, deletando os valores iguais as strings de referência, mas não deu certo.

    Outra curiosidade que ficou é, como faço para, por exemplo, nesse caso, quando a consulta me retornar os valores eu separar as datas por linhas, exemplo:

    2012-06-06 Loja(1) codigo (1) venda (2,00) auditoria (3,00) reducaoz (9,00) quantidade (9)

    2012-06-08 Loja(1) codigo (1) venda (8,00) auditoria (2,00) reducaoz (6,00) quantidade (9)

    2012-06-06 Loja(1) codigo (1) venda (Nulo) auditoria (5,00) reducaoz (6,00) quantidade (8)

    Teria como fazer isso com comandos pela procedure?


    Assunto = dúvida

    quinta-feira, 12 de julho de 2012 14:02
  • Olá Claudio,

    Na procedure que criamo ontem estavamos inserindo os dados em uma variável tabela. Ela é temporária e só existe no escopo da procedure, assim como qualquer outra variável. Então não existe o risco dela ficar cheia demais ou não.

    Pode-se sim incluir e agrupar o valor de cada transação por sua data.

    A procedure neste caso ficaria assim:

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataInicial DATETIME,
        @DataFinal DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int,
      Data DateTime
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data)
    select     Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    UNION ALL
    select     Nome_Loja, L.Codigo_Loja, 0.0,     0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and  L.Codigo_Shop = @Shopping
    UNION ALL
    select     Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas 
    group by Nome_Loja,Codigo_Loja
    END GO

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Claudio 007-006 quinta-feira, 12 de julho de 2012 16:17
    • Não Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
    • Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
    quinta-feira, 12 de julho de 2012 14:23
    Moderador
  • Olá, Fernando! Eu add a nova procedure, segue o resultado:

    Alberg inc. 6 0,0000 0,0000 400,0000 0 4/6/2012
    Alberg inc. 6 0,0000 11880,0000 0,0000 0 5/6/2012
    Alberg inc. 6 998,0000 300,0000 200,0000 9 6/6/2012
    Alberg inc. 6 0,0000 0,0000 100,0000 0 7/6/2012
    Alberg inc. 6 100,0000 100,0000 100,0000 5 8/6/2012




























    Simplesmente genial, creio que satifaz minha dúvida e foi uma grande aula, obrigado pela lição :D


    Assunto = dúvida

    quinta-feira, 12 de julho de 2012 16:17
  • Bom dia, Fernando... Creio que está mais que evidente que sou iniciante na plataforma .NET, certo? Estou com dificuldades com essa coisa de parâmetros... Eu estou recebendo as variáveis corretas (os valores batem com o que quero) de data inicial, datafinal, shopping e Loja. Porém, elas dão erro no SETPARAMETER...


            ReportParameter[] reportParams = new ReportParameter[4];
            reportParams[0] = new ReportParameter("DataInicial", dtInicial);
            reportParams[1] = new ReportParameter("DataFinal", dtFinal);
            reportParams[2] = new ReportParameter("Shopping", strIdShopping);
            reportParams[3] = new ReportParameter("Loja", strIdLoja);


            ReportViewer1.LocalReport.SetParameters(reportParams); <- Aqui aponta o erro. (An error occurred during local report processing.)
            ReportViewer1.ShowParameterPrompts = false;
            ReportViewer1.LocalReport.Refresh();



    An attempt was made to set a report parameter 'DataInicial' that is not defined in this report.

    Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

    Detalhes da Exceção: Microsoft.ReportingServices.Diagnostics.Utilities.UnknownReportParameterException: An attempt was made to set a report parameter 'DataInicial' that is not defined in this report.


    Um dos únicos erros da página é: Error    81    Referência de objeto não definida para uma instância de um objeto.    /

    Segue minhas Sets:

     <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
                TypeName="Relatorios_mes_ValoresTableAdapters.spTesteConsultaTableAdapter" OldValuesParameterFormatString="original_{0}" InsertMethod="Insert">
                    <SelectParameters>
                    <asp:SessionParameter Name="Loja" SessionField="Loja" Type="Int32" />
                    <asp:SessionParameter Name="Shopping" SessionField="Shop_Select" Type="Int32" />
                    <asp:SessionParameter Name="DataInicial" SessionField="DataInicial" Type="DateTime" />
                    <asp:SessionParameter Name="DataFinal" SessionField="DataFinal" Type="DateTime" />
                </SelectParameters>
                <InsertParameters>
                    <asp:Parameter Name="Loja" Type="Int32" />
                    <asp:Parameter Name="Shopping" Type="Int32" />
                    <asp:Parameter Name="DataInicial" Type="DateTime" />
                    <asp:Parameter Name="DataFinal" Type="DateTime" />
                </InsertParameters>
                </asp:ObjectDataSource>

    E na minha .xsd:

    <Parameters>
                          <Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="ReturnValue" ParameterName="@RETURN_VALUE" Precision="10" ProviderType="Int" Scale="0" Size="4" SourceColumnNullMapping="False" SourceVersion="Current">
                          </Parameter>
                          <Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Loja" Precision="10" ProviderType="Int" Scale="0" Size="4" SourceColumn="Codigo_Loja" SourceColumnNullMapping="False" SourceVersion="Current">
                          </Parameter>
                          <Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Shopping" Precision="10" ProviderType="Int" Scale="0" Size="4" SourceColumn="" SourceColumnNullMapping="False" SourceVersion="Current">
                          </Parameter>
                          <Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DataInicial" Precision="23" ProviderType="DateTime" Scale="3" Size="8" SourceColumn="Data" SourceColumnNullMapping="False" SourceVersion="Current">
                          </Parameter>
                          <Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DataFinal" Precision="23" ProviderType="DateTime" Scale="3" Size="8" SourceColumn="Data" SourceColumnNullMapping="False" SourceVersion="Current">
                          </Parameter>
                        </Parameters>

    Pelo que vi os parâmetros estão certos...



    Assunto = dúvida

    sexta-feira, 13 de julho de 2012 13:56
  • Consegui!  O problema era muito simples! Na RDLC eu não tinha definido parâmetros!

    Assunto = dúvida

    sexta-feira, 13 de julho de 2012 17:53
  • Olá, Fernando Henrique! Tudo bem?? Cara, aprendi bastante sobre SQL depois dessas dúvidas, porém, preciso fazer uma modificação naquela Procedure que você me ajudou, não estou conseguindo fazer uma modificação que foi pedida agora:

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataInicial DATETIME,
        @DataFinal DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int,
      Data DateTime
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data)
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and  L.Codigo_Shop = @Shopping
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas 
    group by Nome_Loja,Codigo_Loja, Data
    END
    
    EXEC spTesteConsulta 0, 0, @DataInicial, @DataFinal
    GO

    Quando ValorVenda, Valor_Auditado, Redu_VL_ValorVenda tiverem valor "0" isso é, por exemplo:

    dia 2012-08-07 e ValorVenda: 0,00 e Valor_Auditado: 0,00 e Redu_VL_ValorVenda:0,00

    Então aparecer uma linha em branco, demonstrando que aquele dia a loja não abriu. (seria acrescentar essa funcionalidade) eu tentei acrescentar um "Where" para pegar o valor 0 e acrescentar como nulo, ou mesmo mostrando zero mesmo na tela (seria melhor ter os 3 campos com 0,00 no dia sem venda) mas retorna erro. Poderia me ajudar novamente?

    Desde já agradeço o apoio,

    Cláudio vieira.


    Assunto = dúvida

    terça-feira, 7 de agosto de 2012 14:22
  • Olá Carlos,

    Veja se isso lhe ajuda:

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataInicial DATETIME,
        @DataFinal DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int,
      Data DateTime
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data)
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and  L.Codigo_Shop = @Shopping
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas 
    group by Nome_Loja,Codigo_Loja, Data
    END
    
    DELETE FROM @vendas WHERE Valor_Auditado = 0 AND ValorVenda = 0 AND Redu_VL_ValorVenda = 0
    
    EXEC spTesteConsulta 0, 0, @DataInicial, @DataFinal
    GO

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 7 de agosto de 2012 14:36
    Moderador
  • Ola, Fernando! Não... Estou mandando a Print com um exemplo da ideia...

      A ideia seria, quando pesquisa, informação e Giv forem (0) (Dia em que a loja não abre) aparecer tbm na consulta...


    Assunto = dúvida

    terça-feira, 7 de agosto de 2012 15:13
  • onde estou apanhando é que não consigo trazer datas onde os três valores sejam 0. Tentei usar a função count da expression, mas não deu muito certo tbm.

    Assunto = dúvida

    terça-feira, 7 de agosto de 2012 15:31
  • A minha ideia era:

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataInicial DATETIME,
        @DataFinal DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int,
      Data DateTime
    )
    INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data)
    select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Valor_Auditado >= 0
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and  L.Codigo_Shop = @Shopping and ValorVenda >= 0
    UNION ALL
    select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Redu_VL_ValorVenda >= 0
    select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas 
    group by Nome_Loja,Codigo_Loja, Data
    END
    
    DELETE FROM @vendas WHERE Valor_Auditado = 0 AND ValorVenda = 0 AND Redu_VL_ValorVenda = 0
    
    EXEC spTesteConsulta 0, 0, @DataInicial, @DataFinal
    GO
    where (...) >= 0 Para tentar imprimir sempre que o valor dentro da data inicial e data final for igual a 0.


    Assunto = dúvida

    terça-feira, 7 de agosto de 2012 16:11
  • Olá Claudio,

    Veja se lhe ajuda:

    ALTER PROC spTesteConsulta
        @Loja INT,
        @Shopping INT,
        @DataInicial DATETIME,
        @DataFinal DATETIME
    AS
    BEGIN
    DECLARE @vendas TABLE
    (
      Nome_Loja nvarchar (80), 
      Codigo_Loja int,
      Valor_Auditado Money,
      ValorVenda money,
      Redu_VL_ValorVenda money,
      Qtd_Item int,
      Data DateTime
    )
    
    
    	INSERT INTO @vendas (Nome_Loja, Codigo_Loja,  Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data)
    	select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Valor_Auditado >= 0
    	UNION ALL
    	select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and  L.Codigo_Shop = @Shopping and ValorVenda >= 0
    	UNION ALL
    	select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Redu_VL_ValorVenda >= 0
    	select  Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas 
    group by Nome_Loja,Codigo_Loja, Data
    
    
    	DECLARE @DataAux DATETIME,
    		@Nome_Loja nvarchar (80)		
    		
    	SET @DataAux = @DataInicial
    
    	SELECT TOP 1 @Nome_Loja = Nome_Loja FROM Tab_Loja WHERE Codigo_Loja = @Loja
    
    	WHILE(@DataAux <= @DataFinal) BEGIN
    
    		IF NOT EXISTS(SELECT TOP 1 * FROM @vendas WHERE MONTH(Data) = MONTH(@DataAux) AND DAY(Data) = DAY(@DataAux) AND YEAR(Data) = YEAR(@DataAux)) BEGIN
    
    			INSERT INTO @vendas VALUES (@Nome_Loja, @Loja, 0, 0, 0, 0, @DataAux)
    	
    		END
    
    		SET @DataAux = DATEADD(DAY, 1, @DataAux)
    
    END
    
    SELECT * FROM @vendas
    
    END
    GO

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil


    terça-feira, 7 de agosto de 2012 16:42
    Moderador
  • Olá, Fernando! Eu alterei a procedure... aquele erro no teste sumiu \o/ Mas infelizmente o resultado continua o mesmo :/ segue a print do meu banco mostrando que tenho vendas no mês 8, mas ele só me traz até o mês 6..

    Aqui ele retorna apenas 6 linhas, além de não retornar as linham em que deveriam  ser tudo "0" (que são os intervalos entre datas).. Teria uma maneira de fazer uma contagem de linhas e somar +1 (string) para cada linha nula (intervalo de data)  ou algo assim? poderia me ajudar tbm...


    Assunto = dúvida

    terça-feira, 7 de agosto de 2012 17:34

  • Assunto = dúvida

    terça-feira, 7 de agosto de 2012 17:34
  • Porém, nessa loja em que todos os valores são nulos, ela me retornou o as tres linhas como 0 (inclusive itens)... com essa procedure.


    Assunto = dúvida

    terça-feira, 7 de agosto de 2012 18:37
  • Tentei criar um where que amarrasse a data com o valor "0", mas dá erro... Parece que não dá para eu pegar a data do parâmetro inicial e do parâmetro data final, amarrar com uma data e se o valor for "0" eu contar uma string (só para saber o valor total de dias sem venda entre o período inicial e final :/ ) Também ajudaria, pois o cálculo que quero fazer é o seguinte:

    Soma do valor total de uma coluna / Total de dias com vendas * Total de dias no mês... Esse cara que tá me matando.


    Assunto = dúvida

    quarta-feira, 8 de agosto de 2012 01:42
  •  Bom dia Fernando! Então, a solução que me enviou realmente me envia valores da data final, até a inicial. O problema, é que aí volta para  aquele problema de não alinhar os resultados com os dias... Segue a print.


    Assunto = dúvida

    quarta-feira, 8 de agosto de 2012 15:13
  •   Oi galera. Faz um tempinho que estou com um problema para criar um relatório. Desisti de tentar resolver pelo Sql (via procedure) e resolvi partir pra C#... Bem, é o seguinte, tenho um relatório com algo em torno de 7 colunas. 3 dessas colunas são valores de vendas, ambas são da mesma loja (código_loja é a key) e elas retornam-me o resultado por via de 4 parametros:

    @Loja,

    @Shopping

    @DataInicial

    @DataFinal

      Até aqui tudo bem, tenho todos os dados que preciso. porém, meu relatório é mensal, logo, tenho que saber os dias que a loja em questão abre ou não. Para isto, no intervalo da @DataInicial e @DataFinal eu preciso acrescentar o valor "0,00" para todas as colunas que contenham o valores de venda (money) e uma coluna de quantidade (INT). Bem, estou fazendo uma maneira em ADO.NET, porém, até agora não obtive sucesso, alguém poderia ver o erro ou me ajudar com outras ideias?

    PS: O código a seguir só insere dados para uma coluna de vendas.

     string striVV = "select  Nome_Loja, L.Codigo_Loja, ValorVenda, Data_Venda from Tab_Loja as L inner join Tab_Vendas as V on L.Codigo_Loja = V.Codigo_Loja where L.Codigo_Loja = " + Session["Loja"] + " and L.Codigo_Shop = " + Session["Shop_Select"].ToString() + " and Data_Registro BETWEEN " + Session["DataInicial"] + " AND " + Session["DataFinal"] + "";
        ControlShopCS.DB d2 = new DB();
        DataTable dt2 = new DataTable();
        d2.ExecuteQuery(striVV, ref dt2);
    
    
    
        int i;
    
        string StrAud = "Select ValorVenda, Data_Venda from Tab_Vendas where  L.Codigo_Loja = " + Session["Loja"] + " and L.Codigo_Shop = " + Session["Shop_Select"].ToString() + " and Data_Registro BETWEEN " + Session["DataInicial"] + " AND " + Session["DataFinal"] + "";
    
        for (i = 0; i <= dt2.Rows.Count; i++)
        {
            if (StrAud == "")
            {
                StrAud = "INSERT INTO Tab_Vendas (ValorVenda == Null)";
                StrAud += "Value (0.00)";
    
                ControlShopCS.DB d4 = new DB();
                d4.ExecuteQuery(StrAud);
            }
        }

    Desde já agradeço a atenção.


    Assunto = dúvida

    quinta-feira, 9 de agosto de 2012 23:46
  • Olá Claudio,

    Desculpe a demora em responder. Estes dias foram muito corridos, tenho trabalhado até mto tarde sempre.

    Isto deve resolver:

    ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping DECLARE @DataAux DATETIME, @Nome_Loja nvarchar (80) SET @DataAux = @DataInicial SELECT TOP 1 @Nome_Loja = Nome_Loja FROM Tab_Loja WHERE Codigo_Loja = @Loja WHILE(@DataAux <= @DataFinal) BEGIN IF NOT EXISTS(SELECT TOP 1 * FROM @vendas WHERE MONTH(Data) = MONTH(@DataAux) AND DAY(Data) = DAY(@DataAux) AND YEAR(Data) = YEAR(@DataAux)) BEGIN INSERT INTO @vendas VALUES (@Nome_Loja, @Loja, 0, 0, 0, 0, @DataAux) END SET @DataAux = DATEADD(DAY, 1, @DataAux) END select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja, Data END

    go

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil


    sexta-feira, 10 de agosto de 2012 01:10
    Moderador
  • Claudio,

    Tudo beleza?

    Respondi sua outra thread. Estava faltando apenas o group by naquela procedure.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    sexta-feira, 10 de agosto de 2012 01:10
    Moderador
  • Muito obrigado Fernando! (:

    Assunto = dúvida

    sexta-feira, 10 de agosto de 2012 01:41
  • Olá Fernando, boa noite!! Inicialmente gostaria de agradecer pelo apoio (: Eu fiquei tentando criar alterações na procedure, como sempre tem sido uma grande aula para mim ^^ Uma dúvida que ficou é, o que faz o comando "select top1"?

    Novamente eu agradeço pelo apoio,

    Cláudio;


    Assunto = dúvida

    sexta-feira, 10 de agosto de 2012 01:48
  • Olá Claudio,

    O "SELECT TOP 1" (tem um espaço entre o TOP e o 1) indica que será selecionada apenas a primeira linha.

    O TOP 2 retorna as duas primeiras linhas, o TOP 3 as três primeiras linhas e assim por diante.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    sexta-feira, 10 de agosto de 2012 01:50
    Moderador
  •   Bom dia Fernando, Entendi o TOP (:

    Cara, agora apresentou o seguinte problema:

    Mas qual seria essa string que ele tenta converter? o_0'


    Assunto = dúvida

    sexta-feira, 10 de agosto de 2012 13:31
  • Olá Claudio,

    No report vc esta passando a data 31/06/2012, essa data não existe. Junho vai só até o dia 30.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Claudio 007-006 sexta-feira, 10 de agosto de 2012 13:46
    sexta-feira, 10 de agosto de 2012 13:33
    Moderador
  • Só posso dizer que aprendi muito mais aqui do que em muitos livros ou em aulas. E essa lição de agora, parece que um programador tem que ter antes de tudo calma e uma visão ampliada da situação, obrigado pelos bons exemplos, Fernando ;)

    Seguindo seu blog, é um ótimo Exemplo de profissional ;)

    Obrigado!


    Assunto = dúvida

    sexta-feira, 10 de agosto de 2012 13:49
  • Vlw! Muito obrigado pelos elogios Claudio :)

    Meu objetivo realmente é compartilhar conhecimento e aprender com o fórum.

    Nós somos uma comunidade e estamos sempre trabalhando com o intuito de ajudar uns aos outros :)

    Se me permitir vou mesclar esta thread com aquela que vc abriu essa semana, pois o assunto é o mesmo.

    Obrigado.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    sexta-feira, 10 de agosto de 2012 13:51
    Moderador
  • Claro (: Pretendo me empenhar mais e, quem sabe num futuro próximo ser um exemplo tbm :)

    Assunto = dúvida

    sexta-feira, 10 de agosto de 2012 13:58
  • Boa! Vou esperar por suas contribuições :)

    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    sexta-feira, 10 de agosto de 2012 14:08
    Moderador