none
Como montar esta query. RRS feed

  • Pergunta

  • Prezados, Desculpa pelo titulo mas não soube sintetizar em um titulo a minha duvida.

    meu caso é o seguinte possou uma query que me retorna os seguintes campos, partNp, partNa, unidade, descrição DESCR, quantet, qtd, diferença, serial.

    No meu caso, tenho as seguintes tabelas Tbl_Suprimento,Tbl_estoque,Tbl_SuprimentosUnidades,Tbl_EstoqueSerial.

    Um registro da tabela suprimentos pode ter X entradas na tbl_ estoque ( gravo a dt de entrada ou dt de saida e a qtd ) na tbl_SuprimentosUnidades tenho os tipos de unidades ( litro, unidade etc) e o meu problema é a tbl_EstoqueSerial na qual gravo um serial para cada registro da tbl_Suprimento( quando o produto possui serial).

    Na query que montei recebo todos os registros se repitindo, como no exemplo abaixo.

    o Campo diferença repete os valores para cada serial. gostaria de que somente o 1 registro ficasse com o campo diferença , quantent e qtd. minha query segue abaixo se alguem puder me ajudar agradeço.

    ;with CTE_E as( select id_supri, SUM(qtd)as qtd from Tbl_estoque where dtentrada between '01/01/2015' and '07/07/2015'
    group by id_supri),CTE_S as ( select  id_supri, SUM(qtd) as qtd from Tbl_estoque where dtsaida between  
    '01/01/2015' and '07/07/2015' group by id_supri)select e.Qtd as quantent,s.qtd,coalesce(e.Qtd, 0) - coalesce(s.qtd,0) as 
    Diferenca,tcc.partNp,tcc.partNa,tcc.Unidade,tsu.descricao ,tcc.DESCR , tee.serial from CTE_E as e full join CTE_S as s on s.id_supri = e.id_supri 
    inner join Tbl_Suprimento as tcc on tcc.Id_Suprimento = e.id_supri or tcc.Id_Suprimento = s.id_supri  inner join Tbl_EstoqueSerial as tee on tee.id_supri = tcc.Id_Suprimento 
    inner join Tbl_SuprimentosUnidades as tsu on tsu.sigla = tcc.Unidade

    Att, Wsti.

    quinta-feira, 2 de julho de 2015 15:21

Respostas

Todas as Respostas

  • Boa tarde,

    Wsti, não sei se entendi corretamente a sua questão mas experimente dessa forma:

    ;with 
        CTE_E as
        ( 
            select 
                id_supri, 
                SUM(qtd)as qtd 
            from Tbl_estoque 
            where 
                dtentrada between '01/01/2015' and '07/07/2015'
            group by 
                id_supri),
        CTE_S as 
        ( 
            select  
                id_supri, 
                SUM(qtd) as qtd 
            from Tbl_estoque 
            where 
                dtsaida between '01/01/2015' and '07/07/2015' 
            group by 
                id_supri)
    
    select 
        case when ca.RN = 1 then e.Qtd end as quantent,
        case when ca.RN = 1 then s.qtd end as qtd,
        case when ca.RN = 1 then coalesce(e.Qtd, 0) - coalesce(s.qtd,0) end as Diferenca,
        tcc.partNp,
        tcc.partNa,
        tcc.Unidade,
        tsu.descricao,
        tcc.DESCR, 
        ca.serial 
    from CTE_E as e 
    full join CTE_S as s 
        on s.id_supri = e.id_supri 
    inner join Tbl_Suprimento as tcc 
        on tcc.Id_Suprimento = e.id_supri or tcc.Id_Suprimento = s.id_supri
    inner join Tbl_SuprimentosUnidades as tsu 
        on tsu.sigla = tcc.Unidade
    cross apply
    (
        select serial, ROW_NUMBER(ORDER BY serial) as RN
        from Tbl_EstoqueSerial as tee 
        where tee.id_supri = tcc.Id_Suprimento 
    ) as ca

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 2 de julho de 2015 17:20
  • Oi José, sim como exemplo

    9682004403A | 7DF710A | UNIDADE | ORING | 6.00 | HR0001

    9682004403A | 7DF710A | UNIDADE | ORING |        | HR0002

    9682004403A | 7DF710A | UNIDADE | ORING |        | HR0003

    Assim pois vou alimentar um pdf com essa informação .

    Mais uma vez obrigado pela tua ajuda.

    Abraços Wsti.

    quinta-feira, 2 de julho de 2015 17:20
  • Oi José, funcionou.

    Quando o produto não tem serial eu montei uma 2 consulta que me tras a posição do estoque onde tenho como exemplo

    9682004403A | 7DF710A | UNIDADE | ORING | 6.00 |

    9682001952A |7DF710A64C8 | UNIDADE | ORING | 16.00|

    essa consulta que vc me passou usaria somente para a visualização do estoque com serial.

    estou gravando da seguinte forma, o produto "prego" tem serial e esta entrando 20 no estoque.

    gravo na tabela suprimento os dados desse produto nome cor tamanho etc.

    na tabela estoque gravo o id do suprimento , qtd e data entrada

    na tabela estoque serial gravo id suprimento , dt entrada , e o serial . nesse exemplo teria 10 registros hr0001,hr0002 ... etc.

    nessa tabela tenho um campo char que receba 'A' ativo 'U' usado . quando o produto não possui serial não gravo nessa tabela somente na tbl estoque.

    Tive muitas duvidas ate chegar nesse modelo, creio que existam outras maneiras de montar essa solução. mas foi essa que consegui montar. Se vc tiver outra sugestão pf diga, pois estou aqui pra aprender.Posto o modelo abaixo.

    Att, Wsti.

    quinta-feira, 2 de julho de 2015 18:16
  • A tabela estoque serial só recebe dados quando o suprimento tem um serial, esse serial pode ser gerado pela empresa com o hr0001 ou o suprimento ter um serial da fabrica que o produziu.

    existem suprimentos que não possuem serial. dai não são gravados nessa tabela.

    quando um suprimento é inserido gravo na tbl-estoque  qtd (total) o id do suprimento e a data.

    quando esse suprimento tem um serial gravo na tbl-estoque serial. 

    o total do estoque eu tenho na tabela estoque que recebe o que entra e o que sai.

    quinta-feira, 2 de julho de 2015 18:31
  • José, realmente estou usando a 1 versão.

    que nesse caso esta saindo as informações como abaixo.

    Ccomo relatei anteriormente quando o partNp ( produto) não tem serial não gravo na tabela estoqueserial, somente na tbl estoque. dai uso outra consulta somente para mostrar uma posição do estoque.

    O que precisava realmente era uma solução como vc me postou que tenho no 1 registro do partnp a qtd total e a relação de seriais da tabela. poderia ate incrementar de ter nessa mesma consulta o resultado dos registros que não tivessem serial mas não sei se é possivel ? outra ajuda seria filtrar a consulta onde Tbl_EstoqueSerial . Ativo = 'A'. Se esse meu pedido fosse viavel me ajudaria e muito.

    Mais uma vez te agradeço.

    Att, wsti.

    quinta-feira, 2 de julho de 2015 19:36
  • Bom dia josé, posso realizar essa modificação na tbl_estoque. o campo data seria unico a qtd  e tipo_do_ mov um char de (1)caracter E ou S isso. 

    sexta-feira, 3 de julho de 2015 13:55

  • Oi jose, testei aqui mas esta repetindo os dados e mantendo a repetição dos campos qtdEnt Qtd saida e diferença.

    Alterei a tabela estoque

     ficou id_esto | id_supri | dtmov | tipoMov ( char e - entrada  s-saida) | qtd
    sexta-feira, 3 de julho de 2015 14:25
  • Ok Obrigado.
    sábado, 4 de julho de 2015 02:09