sábado, 19 de março de 2016

Curiosidade dos códigos

Recebo alguns emails sobre o que é o SQL e o que ele faz. Bem, primeiro quero referir que não tenho nenhuma formação em informática por isso, se algum perito em informática detetar algum erro, já sabe que não é a minha área de dominio. O SQL são consultas as bases de dados dos programas que usamos diariamente. Estes programas tem por detrás tabelas onde guardam tudo o que fazemos. Se tivermos acesso as tabelas, podemos consultar e devolver todos os dados de análise que precisamos sem grande trabalho(depois de termos o nosso código). O problema que enfrentamos é a quantidade de tabelas e campos dentro dessas tabelas. Só para terem uma ideia, o software da primavera tem +/- 17.600 campos que estão dispersos em diversas tabelas. Pois é, muitas tabelas e muitos campos e o problema inicial é como se ligam entre eles. Temos que analisar as tabelas e seguir a lógica daquilo que precisamos. A lógica é fundamental na informática para se poder trabalhar de uma forma rápida e eficaz. Para ficarem com uma ideia de contruir um mapa de stocks que tenham os seguintes campos: código do artigo, nome do material, Unidade básica do stock, quantidade de stock, consumos desde uma determinada data, Vendas (para ter tecido consumo uma tela, neste caso preciso dos tecidos para analisar se o stock é critico ou não), última data de consumo, última data de venda, etc. Abaixo fico o código para devolver um mapa simples compreensão e análise. Este recurso é usado entre o excel e o acess para poder retirar a informação necessária e poder análisar o stock em várias vertentes. Imaginem o acesso a base de dados do software. O limite é mesmo a nossa imaginação.....divirtam-se.

Select
S1.Material,
S1.Nome,
S1.Stock,
S1.Lote,
S1.[Consumo>=2012],
S1.[Vendas>=2012],
S2.UltConsumo
From
(SELECT
S1.Material,
S1.Nome,
S1.Stock,
S1.Lote,
S1.Consumo as [Consumo>=2012],
Sum(S2.[Vendas>=2012]) as [Vendas>=2012]
From
(Select
S1.Material,
S1.Nome,
S1.Stock,
S1.Lote,
S2.Consumo
From
(Select
S2.Material,
S1.Nome,
S1.Lote,
SUM(S1.Stock)-SUM(S2.Reser_Necess) as Stock
from
(
Select
S1.Material,
S2.Nome,
S1.Lote,
round(s1.Stock,0) as Stock
From
(Select
S1.Material,
sum(s1.lote) as Lote,
Sum(S1.Stock) as Stock
From
(Select
S2.Material,
S1.Lote,
S1.Stock
From
(
SELECT
MB52.`Nº do material` as Material_prep,
Count(MB52.lote) as Lote,
Sum(MB52.`Utilização livre`)+Sum(MB52.`Trânsito e TE`)+Sum(MB52.`Em contrqualidade`)+Sum(MB52.Restrito)+Sum(MB52.Bloqueado)-Sum(MB52.Devoluções)+Sum(MB52.`Estoque trânsito`)+Sum(MB52.`Em transferênc`) as Stock
FROM MB52
where left(MB52.`Nº do material`,2) like 'TP'
Group By MB52.`Nº do material`) as S1
Left Join
(
SELECT
TL_TC.Material as Material, TL_TC.`Mat Confi`as Material_Prep
FROM TL_TC TL_TC
Where  TL_TC.`Mat Confi` like 'TP%') as S2
ON s1.Material_Prep=s2.Material_Prep
Where S1.Stock >0
Order By S1.Stock desc
Union
SELECT
MB52.`Nº do material` as Material,
Count(MB52.lote) as Lote,
Sum(MB52.`Utilização livre`)+Sum(MB52.`Trânsito e TE`)+Sum(MB52.`Em contrqualidade`)+Sum(MB52.Restrito)+Sum(MB52.Bloqueado)-Sum(MB52.Devoluções)+Sum(MB52.`Estoque trânsito`)+Sum(MB52.`Em transferênc`) as Stock
FROM MB52
Where Left (MB52.`Nº do material` ,2) Not like 'TP'
group By MB52.`Nº do material`) as S1
Group By S1.Material
Order By Sum(S1.Stock)  desc) S1
Left Join
(SELECT
QTelas.Material as Material,
QTelas.`Texto breve material` as Nome
from Qtelas) as S2
ON s1.Material=s2.material
Group By S1.Material,
S2.Nome,
s1.Lote,
s1.Stock
Order By s1.Stock desc) as S1
left Join
(
Select
S1.Material,
Sum(S1.Reser_Necess) as Reser_Necess
From
(Select
S2.Material,
S1.Reser_Necess
From
(SELECT
Nec_Prod.Material as Material_Prep,
sum (Nec_Prod.NecIndepe)+ sum( Nec_Prod.Reservas) as Reser_Necess
FROM Nec_Prod Nec_Prod
WHERE Left(Nec_Prod.Material ,2) like 'TP'
Group By Nec_Prod.Material
Order By sum (Nec_Prod.NecIndepe)+ sum( Nec_Prod.Reservas) desc) As S1
Left Join
(
SELECT
TL_TC.Material as Material, TL_TC.`Mat Confi`as Material_Prep
FROM TL_TC TL_TC
Where  TL_TC.`Mat Confi` like 'TP%') as S2
ON s1.Material_Prep=s2.Material_Prep
UNION
SELECT
Nec_Prod.Material as Material,
sum (Nec_Prod.NecIndepe)+ sum( Nec_Prod.Reservas) as Reser_Necess
FROM Nec_Prod Nec_Prod
WHERE Left(Nec_Prod.Material ,2) Not  like 'TP'
Group By Nec_Prod.Material) As S1
Group By S1.Material
Order By Sum(S1.Reser_Necess)  desc) as S2
ON S1.Material=S2.material
WHERE S1.Nome not like '%FIC%' and  S1.Nome not like '%Guia%' and S1.Nome NOT Like '%Desa%' and S1.Nome NOT Like '%Anula%'
Group By S2.Material, S2.Reser_Necess, S1.Stock, S1.Nome, S1.Lote
Having
SUM(S1.Stock)-SUM(S2.Reser_Necess) >0
Order BY SUM(S1.Stock)-SUM(S2.Reser_Necess) desc) as S1
Left Join
(SELECT
iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9) as Material,
Sum(MB51Cons.`Qtd  UM registro`*'-1') as Consumo
FROM MB51Cons
Where Year(MB51Cons.Dtlçto) >='2012' and MB51Cons.Material NOT IN(
SELECT
iif(left(MB51Cons.Material,2)='TP','TL','')+''+ Right(MB51Cons.Material,9)as Material
FROM MB51Cons
Where  Year(MB51Cons.Dtlçto) >='2012' and Left(MB51Cons.Material,2)='TP'
GROUP BY MB51Cons.Material
Having Sum(MB51Cons.`Qtd  UM registro`*'-1')>0)
Group By iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9)
Order by Sum(MB51Cons.`Qtd  UM registro`*'-1') desc) as S2
ON S1.material= S2.Material
Order By S1.Stock desc) as S1
Left Join
(Select
S1.Material,
S2.[Vendas>=2012]
From
(Select
s1.Material,
s1.MatConf
from
(SELECT
TL_TC.Material as Material,
TL_TC.`Mat Confi`as MatConf
FROM mb52 left join TL_TC on mb52.`Nº do material`=TL_TC.Material
where len([mat Confi])='11'
union
SELECT
iif(left(Tp_TC.Material,2)='EL', 'EL', 'TL')+''+ Right(Tp_TC.Material,9) as Material,
Tp_TC.`Mat Confi` as MatConf
FROM mb52 left join Tp_TC  on mb52.`Nº do material`=Tp_TC.Material
where len([mat Confi])='11') as s1
where s1.material  in (
select
iif(Left(BITelas.Material,2)='El','El','TL')+''+Right(BITelas.Material,9)
from
BItelas
Group by iif(Left(BITelas.Material,2)='El','El','TL')+''+Right(BITelas.Material,9)
Having Sum(BITelas.`QTD Stock Total`)>0)) As S1
Left Join
(SELECT
`201210-Vendas`.Material as Material,
Sum(`201210-Vendas`.`BW: QTD UMB`) as [Vendas>=2012]
FROM  `D:\Users\marco.azevedo\Documents\Bases Projecto Stocks\Análise ao Stock\CloudPT\01-Tecidos\Estrutura do Ficheiro\DataBaseTecidos.accdb`.`201210-Vendas` `201210-Vendas`

Where Year(`201210-Vendas`.`Data Fatura`) >='2012' And `201210-Vendas`.`Canal distribuição` in ('01', '02')
Group By `201210-Vendas`.Material
Having Sum(`201210-Vendas`.`BW: QTD UMB`)  >0) as S2
ON S1.MatConf=S2.Material
Order By S2.[Vendas>=2012] desc) as S2
ON S1.Material=S2.Material
Group By S1.Material,
S1.Nome,
S1.Stock,
S1.Consumo, S1.Lote
Order By S1.Stock desc) as S1
Left Join
(Select
S1.Material as Material,
S1.UltConsumo
From
(SELECT
iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9) as Material,
Max(MB51cons.Dtlçto) As UltConsumo,
Sum(MB51Cons.`Qtd  UM registro`*'-1') as Consumo
FROM MB51Cons
Where Year(MB51Cons.Dtlçto) >='2011' and MB51Cons.Material NOT IN(
SELECT
iif(left(MB51Cons.Material,2)='TP','TL','')+''+ Right(MB51Cons.Material,9)as Material
FROM MB51Cons
Where  Year(MB51Cons.Dtlçto) >='2011' and Left(MB51Cons.Material,2)='TP'
GROUP BY MB51Cons.Material
Having Sum(MB51Cons.`Qtd  UM registro`*'-1')>0)
Group By iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9)
Order by Sum(MB51Cons.`Qtd  UM registro`*'-1') desc) as S1) as S2
ON S1.Material=S2.Material
Order by  S1.Stock desc

Sem comentários:

Enviar um comentário