Somando Campo - Trigger
Bom dia.
é a primeria vez que posto aqui, espero poder aprender bastante com voces, e ensinar um pouco do que sei =)
Bom ... vamos la ...
Estou com um probleminha.
Tenho uma tabela SAIDA_PRODUTO, onde faço a inserção dos produtos solicitados, nela contem os seguintes campos: data da solicitação, nome do setor solicitante, o tipo do produto e a quantidade.
Então, ai é que entra problema.
Toda vez que é solicitado um produdo, ocorre uma duplicidade de setor.
Ai criei uma trigger, que me informa todos os dados acima.
Isso vai para um relatório mensal, o relatório é constituído por uma view que contem inner join com 3 tabelas, fiz algumas alterações na view, depois da criação da trigger, estaria tudo perfeito, se não fosse o caso da trigger me retornar várias vezes, igual estava anteriormente.
Eu queria apenas que pegasse a setor solicitante e somasse a quantidade do produto solicitado por ele.
é a primeria vez que posto aqui, espero poder aprender bastante com voces, e ensinar um pouco do que sei =)
Bom ... vamos la ...
Estou com um probleminha.
Tenho uma tabela SAIDA_PRODUTO, onde faço a inserção dos produtos solicitados, nela contem os seguintes campos: data da solicitação, nome do setor solicitante, o tipo do produto e a quantidade.
Então, ai é que entra problema.
Toda vez que é solicitado um produdo, ocorre uma duplicidade de setor.
Ai criei uma trigger, que me informa todos os dados acima.
Isso vai para um relatório mensal, o relatório é constituído por uma view que contem inner join com 3 tabelas, fiz algumas alterações na view, depois da criação da trigger, estaria tudo perfeito, se não fosse o caso da trigger me retornar várias vezes, igual estava anteriormente.
Eu queria apenas que pegasse a setor solicitante e somasse a quantidade do produto solicitado por ele.
Simone
Curtidas 0
Respostas
Mariana Carvalho
21/10/2013
Simone, posta o script.
GOSTEI 0
Simone
21/10/2013
Oi Mariana esse é um dos script que tenho.
Ele me retorna 1 pra cada setor, sendo que tem setor zerado, e se eu acrescento mais 1 em um setor que ja tem, totalizando 2, ele retorna 2 pra todos.
SELECT DISTINCT
CASE
WHEN MONTH(DATA_SAIDA) = 01 THEN 'Janeiro'
WHEN MONTH(DATA_SAIDA) = 02 THEN 'Fevereiro'
WHEN MONTH(DATA_SAIDA) = 03 THEN 'Março'
WHEN MONTH(DATA_SAIDA) = 04 THEN 'Abril'
WHEN MONTH(DATA_SAIDA) = 05 THEN 'Maio'
WHEN MONTH(DATA_SAIDA) = 06 THEN 'Junho'
WHEN MONTH(DATA_SAIDA) = 07 THEN 'Julho'
WHEN MONTH(DATA_SAIDA) = 08 THEN 'Agosto'
WHEN MONTH(DATA_SAIDA) = 09 THEN 'Setembro'
WHEN MONTH(DATA_SAIDA) = 10 THEN 'Outubro'
WHEN MONTH(DATA_SAIDA) = 11 THEN 'Novembro'
WHEN MONTH(DATA_SAIDA) = 12 THEN 'Dezembro'
end Mes,
DATEPART(YEAR,GETDATE()) Ano ,
dir.NOME_DIRE Diretoria ,
count (distinct ap.QUANTIDADE) Quantidade
FROM tb_Atualização_Produto ap
INNER JOIN tb_SAIDA sa
ON ap.ID_PRODUTO = sa.ID_PRODUTO
INNER JOIN FUNCIONARIOS.dbo.tb_DIRETORIA dir
ON sa.ID_DIRE = dir.ID_DIRE
GROUP BY ap.DATA_SAIDA,dir.NOME_DIRE, ap.QUANTIDADE
Ele me retorna 1 pra cada setor, sendo que tem setor zerado, e se eu acrescento mais 1 em um setor que ja tem, totalizando 2, ele retorna 2 pra todos.
SELECT DISTINCT
CASE
WHEN MONTH(DATA_SAIDA) = 01 THEN 'Janeiro'
WHEN MONTH(DATA_SAIDA) = 02 THEN 'Fevereiro'
WHEN MONTH(DATA_SAIDA) = 03 THEN 'Março'
WHEN MONTH(DATA_SAIDA) = 04 THEN 'Abril'
WHEN MONTH(DATA_SAIDA) = 05 THEN 'Maio'
WHEN MONTH(DATA_SAIDA) = 06 THEN 'Junho'
WHEN MONTH(DATA_SAIDA) = 07 THEN 'Julho'
WHEN MONTH(DATA_SAIDA) = 08 THEN 'Agosto'
WHEN MONTH(DATA_SAIDA) = 09 THEN 'Setembro'
WHEN MONTH(DATA_SAIDA) = 10 THEN 'Outubro'
WHEN MONTH(DATA_SAIDA) = 11 THEN 'Novembro'
WHEN MONTH(DATA_SAIDA) = 12 THEN 'Dezembro'
end Mes,
DATEPART(YEAR,GETDATE()) Ano ,
dir.NOME_DIRE Diretoria ,
count (distinct ap.QUANTIDADE) Quantidade
FROM tb_Atualização_Produto ap
INNER JOIN tb_SAIDA sa
ON ap.ID_PRODUTO = sa.ID_PRODUTO
INNER JOIN FUNCIONARIOS.dbo.tb_DIRETORIA dir
ON sa.ID_DIRE = dir.ID_DIRE
GROUP BY ap.DATA_SAIDA,dir.NOME_DIRE, ap.QUANTIDADE
GOSTEI 0
Alex Lekao
21/10/2013
Oi Simone, boa tarde!!!
Para a data eu sugeriria vc usar assim substring(convert(varchar,DATA_SAIDA,106),4,9) nao apresenta todo o nome do mes, mas acredito que fique legal, pq tem parte do nome do mes e sem o uso do case deve ficar mais rapido o script.
Dependendo do que esta querendo, utilize uma sub select para ver se resolve.
Eu particularmente nao entendi muito bem o que esta querendo.
Espero ter ajudado.
Abraco.
Alex - Lekao
Para a data eu sugeriria vc usar assim substring(convert(varchar,DATA_SAIDA,106),4,9) nao apresenta todo o nome do mes, mas acredito que fique legal, pq tem parte do nome do mes e sem o uso do case deve ficar mais rapido o script.
Dependendo do que esta querendo, utilize uma sub select para ver se resolve.
Eu particularmente nao entendi muito bem o que esta querendo.
Espero ter ajudado.
Abraco.
Alex - Lekao
GOSTEI 0
Simone
21/10/2013
Olá Alex,
Eu ja fiz um subselect
with TONNER as
(
SELECT
case
when isnull (c.Setor, ' ') = ' ' then p.Setor
when isnull (p.Setor, ' ') = ' ' then c.Setor
else ' '
end Setor,
p.Preto,
c.Colorido
FROM (
SELECT
--substring(NOME_PRODUTO, 15, 1),
sa.DATA_SAIDA,
dir.NOME_SETOR Setor,
SUM(QUANTIDADE) Colorido
FROM [CONTROLE].[dbo].[tb_PRODUTO] pr
inner join tb_SAIDA sa
ON pr.ID_PRODUTO = sa.ID_PRODUTO
inner join FUNCIONARIOS.dbo.tb_Setor dir
ON dir.ID_DIRE = sa.ID_DIRE
WHERE substring(pr.NOME_PRODUTO, 15, 1)in('y', 'C', 'M')
-- AND MONTH(DATA_SAIDA) = DATEPART(mm,Getdate()) -1
GROUP BY dir.NOME_SETOR,sa.DATA_SAIDA
) C
full join
(
SELECT
sa.DATA_SAIDA,
dir.NOME_SETOR Setor,
SUM(QUANTIDADE) Preto
FROM [CONTROLE].[dbo].[tb_PRODUTO] pr
inner join tb_SAIDA sa
ON pr.ID_PRODUTO = sa.ID_PRODUTO
inner join FUNCIONARIOS.dbo.tb_Setor dir
ON dir.ID_DIRE = sa.ID_DIRE
WHERE substring(NOME_PRODUTO, 15, 1) = 'K' or substring(NOME_PRODUTO, 16,1) = 'L'
GROUP BY DIR.NOME_SETOR,sa.DATA_SAIDA
) P
ON C.Setor = P.Setor
)
SELECT
Setor ,
isnull (preto, 0) Preto,
isnull (colorido,0) Colorido,
isnull (preto, 0) + isnull (colorido,0) Total
FROM TONNER
..
O problema é o seguinte,
Toda vez que é solicitado um produto, no caso de cima usei o tonner como exemplo. Toda vez que um setor solicitar tonner, eu insiro na tabela as seguintes informações: data, setor solicitante , a qtde solicitada e se é tonner preto ou colorido. (eu tenho uma tabela com os id's dos tonner's)
Eu criei uma view que ja me traz o que eu preciso ...
Aparece assim
setor - Preto - Colorido - Total
A- 1 - 0 - 1
B - 0 - 1 - 1
A - 0 - 1 - 1
Preciso que apareça assim
setor - Preto - Colorido - Total
A- 1 - 1 - 2
B - 0 - 1 - 1
Eu ja fiz um subselect
with TONNER as
(
SELECT
case
when isnull (c.Setor, ' ') = ' ' then p.Setor
when isnull (p.Setor, ' ') = ' ' then c.Setor
else ' '
end Setor,
p.Preto,
c.Colorido
FROM (
SELECT
--substring(NOME_PRODUTO, 15, 1),
sa.DATA_SAIDA,
dir.NOME_SETOR Setor,
SUM(QUANTIDADE) Colorido
FROM [CONTROLE].[dbo].[tb_PRODUTO] pr
inner join tb_SAIDA sa
ON pr.ID_PRODUTO = sa.ID_PRODUTO
inner join FUNCIONARIOS.dbo.tb_Setor dir
ON dir.ID_DIRE = sa.ID_DIRE
WHERE substring(pr.NOME_PRODUTO, 15, 1)in('y', 'C', 'M')
-- AND MONTH(DATA_SAIDA) = DATEPART(mm,Getdate()) -1
GROUP BY dir.NOME_SETOR,sa.DATA_SAIDA
) C
full join
(
SELECT
sa.DATA_SAIDA,
dir.NOME_SETOR Setor,
SUM(QUANTIDADE) Preto
FROM [CONTROLE].[dbo].[tb_PRODUTO] pr
inner join tb_SAIDA sa
ON pr.ID_PRODUTO = sa.ID_PRODUTO
inner join FUNCIONARIOS.dbo.tb_Setor dir
ON dir.ID_DIRE = sa.ID_DIRE
WHERE substring(NOME_PRODUTO, 15, 1) = 'K' or substring(NOME_PRODUTO, 16,1) = 'L'
GROUP BY DIR.NOME_SETOR,sa.DATA_SAIDA
) P
ON C.Setor = P.Setor
)
SELECT
Setor ,
isnull (preto, 0) Preto,
isnull (colorido,0) Colorido,
isnull (preto, 0) + isnull (colorido,0) Total
FROM TONNER
..
O problema é o seguinte,
Toda vez que é solicitado um produto, no caso de cima usei o tonner como exemplo. Toda vez que um setor solicitar tonner, eu insiro na tabela as seguintes informações: data, setor solicitante , a qtde solicitada e se é tonner preto ou colorido. (eu tenho uma tabela com os id's dos tonner's)
Eu criei uma view que ja me traz o que eu preciso ...
Aparece assim
setor - Preto - Colorido - Total
A- 1 - 0 - 1
B - 0 - 1 - 1
A - 0 - 1 - 1
Preciso que apareça assim
setor - Preto - Colorido - Total
A- 1 - 1 - 2
B - 0 - 1 - 1
GOSTEI 0
Alex Lekao
21/10/2013
Oi Bom dia!!!
Entao esses dados que vc precisa eh referente a este script certo?
eu sugiro um teste da seguinte forma:
Faz um teste e posta ai se resolveu.
a alteracao seria somente neste script, que eh onde acredito que esteja apresentando os resultados.
Abraco.
Alex - Lekao
Entao esses dados que vc precisa eh referente a este script certo?
SELECT Setor , isnull (preto, 0) Preto, isnull (colorido,0) Colorido, isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER
eu sugiro um teste da seguinte forma:
SELECT Setor , sum(isnull (preto, 0)) Preto, sum(isnull (colorido,0)) Colorido, isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER group by setor
Faz um teste e posta ai se resolveu.
a alteracao seria somente neste script, que eh onde acredito que esteja apresentando os resultados.
Abraco.
Alex - Lekao
GOSTEI 0
Simone
21/10/2013
Oi Bom dia!!!
Entao esses dados que vc precisa eh referente a este script certo?
eu sugiro um teste da seguinte forma:
Faz um teste e posta ai se resolveu.
a alteracao seria somente neste script, que eh onde acredito que esteja apresentando os resultados.
Abraco.
Alex - Lekao
Entao esses dados que vc precisa eh referente a este script certo?
SELECT Setor , isnull (preto, 0) Preto, isnull (colorido,0) Colorido, isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER
eu sugiro um teste da seguinte forma:
SELECT Setor , sum(isnull (preto, 0)) Preto, sum(isnull (colorido,0)) Colorido, isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER group by setor
Faz um teste e posta ai se resolveu.
a alteracao seria somente neste script, que eh onde acredito que esteja apresentando os resultados.
Abraco.
Alex - Lekao
Bom dia Alex
Se eu fizer o grouo by só pelo setor da esse erro
Mensagem 8120, Nível 16, Estado 1, Linha 47
Column 'TONNER.Preto' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Se faço assim, não muda nada, continua aparecendo mais de uma vez
SELECT
Setor,
isnull (preto, 0) Preto,
isnull (colorido,0) Colorido,
isnull (preto, 0) + isnull (colorido,0) Total
FROM TONNER
GROUP BY Setor,Preto, Colorido
Já estou ficando desesperada rs
GOSTEI 0
Alex Lekao
21/10/2013
oi Simone,
Acho que vc esqueceu de colocar o sum nas colunas de preto e colorido... e talvez nao seja necessario na coluta do total, caso seja acrescente tambem e veja se nao altera os dados.
fazendo isso acho que ja resolve.
Acho que vc esqueceu de colocar o sum nas colunas de preto e colorido... e talvez nao seja necessario na coluta do total, caso seja acrescente tambem e veja se nao altera os dados.
fazendo isso acho que ja resolve.
GOSTEI 0
Simone
21/10/2013
Seria isso ?
SELECT
Setor,
max (preto) Preto,
max (colorido) Colorido,
sum (preto) + sum (colorido) Total
FROM TONNER
GROUP BY Setor, Preto, Colorido
--
SELECT
Setor,
max (preto) Preto,
max (colorido) Colorido,
max (preto) + max (colorido) Total
FROM TONNER
GROUP BY Setor,Preto, Colorido
Esta me retornando NULL nas colunas Colorido e Total, e zero na coluna Preto, e o setor continua aparecendo mais de uma vez.
SELECT
Setor,
max (preto) Preto,
max (colorido) Colorido,
sum (preto) + sum (colorido) Total
FROM TONNER
GROUP BY Setor, Preto, Colorido
--
SELECT
Setor,
max (preto) Preto,
max (colorido) Colorido,
max (preto) + max (colorido) Total
FROM TONNER
GROUP BY Setor,Preto, Colorido
Esta me retornando NULL nas colunas Colorido e Total, e zero na coluna Preto, e o setor continua aparecendo mais de uma vez.
GOSTEI 0
Alex Lekao
21/10/2013
nao...
seria isso:
caso seja necessario, e se der erro no total, vc colocar um sum tbm no total, ficando assim:
o max eh apenas para pegar o maior valor, e se usou um sum em algum outro campo, o sql vai exigir que seja feito o agrupamento de todos os outros campos que nao tenha operacoes que precisem de agrupamento.
verifica agora se da certo.
seria isso:
SELECT Setor , sum(isnull (preto, 0)) Preto, -- aqui vai a soma, e a opcao de substituicao do null por zero. sum(isnull (colorido,0)) Colorido, -- aqui vai a outra soma, e a opcao de substituicao do null por zero. isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER group by setor -- aqui somente o group by do setor.
caso seja necessario, e se der erro no total, vc colocar um sum tbm no total, ficando assim:
sum(isnull(preto, 0) + isnull(colorido,0)) Total
o max eh apenas para pegar o maior valor, e se usou um sum em algum outro campo, o sql vai exigir que seja feito o agrupamento de todos os outros campos que nao tenha operacoes que precisem de agrupamento.
verifica agora se da certo.
GOSTEI 0
Simone
21/10/2013
with TONNER as ( SELECT case when isnull (c.Setor, ' ') = ' ' then p.Setor when isnull (p.Setor, ' ') = ' ' then c.Setor else ' ' end Setor, p.Preto, c.Colorido FROM ( SELECT --substring(NOME_PRODUTO, 15, 1), sa.DATA_SAIDA, dir.NOME_SETOR Setor, SUM(QUANTIDADE) Colorido FROM [CONTROLE].[dbo].[tb_PRODUTO] pr inner join tb_SAIDA sa ON pr.ID_PRODUTO = sa.ID_PRODUTO inner join FUNCIONARIOS.dbo.tb_Setor dir ON dir.ID_SETOR = sa.ID_SETOR WHERE substring(pr.NOME_PRODUTO, 15, 1)in('y', 'C', 'M') GROUP BY dir.NOME_SETOR,sa.DATA_SAIDA ) C full join ( SELECT sa.DATA_SAIDA, dir.NOME_SETOR Setor, SUM(QUANTIDADE) Preto FROM [CONTROLE].[dbo].[tb_PRODUTO] pr inner join tb_SAIDA sa ON pr.ID_PRODUTO = sa.ID_PRODUTO inner join FUNCIONARIOS.dbo.tb_Setor dir ON dir.ID_SETOR = sa.ID_SETOR WHERE substring(NOME_PRODUTO, 15, 1) = 'K' or substring(NOME_PRODUTO, 16,1) = 'L' GROUP BY dir.NOME_SETOR,sa.DATA_SAIDA ) P ON C.Setor = P.Setor ) --SELECT -- Setor , -- isnull (preto, 0) Preto, -- isnull (colorido,0) Colorido, -- isnull (preto, 0) + isnull (colorido,0) Total --FROM TONNER SELECT Setor , sum(isnull (preto, 0)) Preto, -- aqui vai a soma, e a opcao de substituicao do null por zero. sum(isnull (colorido,0)) Colorido, -- aqui vai a outra soma, e a opcao de substituicao do null por zero. sum(isnull (preto, 0) + isnull (colorido,0)) Total FROM TONNER group by Setor,Preto,Colorido -- aqui somente o group by do setor. .
Alex,mto obrigada pela ajuda, ta complicadérrimo! Não mudou nada, Não vai só o group by por setor, da o erro, que mencionei acima. To te mandando a query toda,pq talvez tenha algo errado mais pra cima, e vc consiga enxerga, pq já olhei isso varias vezes, já tentei várias coisas e nada
GOSTEI 0
Alex Lekao
21/10/2013
essa a mensagem que aparece??
Mensagem 8120, Nível 16, Estado 1, Linha 47
Column 'TONNER.Preto' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Faz o seguinte entao, vamos ver se eh isso, os campos preto e colorido sao numericos ou caracter?
se forem numericos, remove o isnull e deixa so o sum(preto) e tal...
o group by deixa so o setor mesmo, aquela soma do total tambem remove o isnull e ve como fica.
pq nao ta fazendo sentido, essa mensagem que aparece eh normalmente porque tem algum campo que nao foi usado na instrucao group by,e como as outras tem sum e operacoes de soma e tal, nao deveriam aparecer.
vou dar mais uma olhada no codigo para ver se acho alguma coisa...
o script que vc colocou eh o script total?
Mensagem 8120, Nível 16, Estado 1, Linha 47
Column 'TONNER.Preto' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Faz o seguinte entao, vamos ver se eh isso, os campos preto e colorido sao numericos ou caracter?
se forem numericos, remove o isnull e deixa so o sum(preto) e tal...
o group by deixa so o setor mesmo, aquela soma do total tambem remove o isnull e ve como fica.
pq nao ta fazendo sentido, essa mensagem que aparece eh normalmente porque tem algum campo que nao foi usado na instrucao group by,e como as outras tem sum e operacoes de soma e tal, nao deveriam aparecer.
vou dar mais uma olhada no codigo para ver se acho alguma coisa...
o script que vc colocou eh o script total?
GOSTEI 0
Simone
21/10/2013
SELECT Diretoria , sum (preto) Preto, sum (colorido) Colorido, sum (preto) + sum (colorido) Total FROM TONNER group by Diretoria
Bom dia Alex,
Esse é o script total sim, consegui colocar o group by por diretoria.
Então quando insiro tonner preto ele faz a soma certinho, já o colorido, quando não tem nada aprece NULL, e quando insiro alguma coisa ,some o nome do setor, e vai acrescentando em apenas uma coluna
Ficou assim ..
Na primeira coluna, sumiu o nome do setor, deveria aparecer mais 2 setores, ambos com 2 colorido.
Setor - Preto - Colorido - Total
- 1 - 4 - 5
Setor1 - 0 - NULL - NULL
Setor2 - 1 - NULL - NULL
Setor3 - 0 - NULL - NULL
GOSTEI 0
Simone
21/10/2013
Alex, o problema em relação a aparição de Null, na coluna Colorido eu consegui consertar, usando o COALESCE.
Mais continua sumindo o Setor, quando insiro tonner colorido.
SELECT case when isnull (c.setor, ' ') = ' ' then p.setor when isnull (p.setor, ' ') = ' ' then c.setor else ' ' end Setor, COALESCE (p.Preto, NULL,0) as Preto, COALESCE (c.Colorido, NULL,0) as Colorido
Mais continua sumindo o Setor, quando insiro tonner colorido.
GOSTEI 0
Alex Lekao
21/10/2013
Sinone, bom dia!!!
Me desculpe por nao esta conseguindo ajudar melhor.
Vamos fazer o seguinte?
me passa o script da tabela que esta montando o select, script de criacao da tabela e alguns inserts de conteudo para eu testar na minha base, para eu ter uma ideia melhor do que pode ser.
Eu coloco o resultado e o que conseguir montar de volta.
o que vc me diz?
Me desculpe por nao esta conseguindo ajudar melhor.
Vamos fazer o seguinte?
me passa o script da tabela que esta montando o select, script de criacao da tabela e alguns inserts de conteudo para eu testar na minha base, para eu ter uma ideia melhor do que pode ser.
Eu coloco o resultado e o que conseguir montar de volta.
o que vc me diz?
GOSTEI 0
Simone
21/10/2013
Mto obrigada pela atenção Alex, segue tudo que uso.
-- Tabela de Setor CREATE TABLE [dbo].[tb_setor]( [ID_setor] [int] IDENTITY(1,1) NOT NULL, [NOME_setor] [varchar](50) NULL ) -- Cadastro dos produtos CREATE TABLE [dbo].[tb_Estoque]( [ID_PRODUTO] [int] IDENTITY(1,1) NOT NULL, [ID_TIPO_PRODUTO] [int] NOT NULL, [NOME_PRODUTO] [varchar](20) NOT NULL, [SALDO_MINIMO] [int] NOT NULL, [SALDO] [int] NOT NULL, ) -- Inserir os produtos CREATE TABLE [dbo].[tb_TIPO_PRODUTO]( [ID_TIPO_PRODUTO] [int] IDENTITY(1,1) NOT NULL, [TIPO_PRODUTO] [varchar](50) NULL, -- Qdo é solicitado um produto, é feito atualização nessa tabela. CREATE TABLE [dbo].[tb_controle_estoque]( [ID_SAIDA] [int] IDENTITY(1,1) NOT NULL, [ID_SETOR] [int] NULL, [DATA_SAIDA] [date] NULL, [ID_PRODUTO] [int] NULL, [QUANTIDADE] [int] NULL ) -- View que seleciona os dados necessários VIEW [dbo].[v_Estoque] as with TONNER as ( SELECT case when isnull (c.setor, ' ') = ' ' then p.setor when isnull (p.setor, ' ') = ' ' then c.setor else ' ' end setor, p.Preto, c.Colorido FROM ( SELECT --substring(NOME_PRODUTO, 15, 1), sa.DATA_SAIDA, dir.NOME_SETOR setor, SUM(QUANTIDADE) Colorido FROM tb_PRODUTO pr inner join tb_SAIDA sa ON pr.ID_PRODUTO = sa.ID_PRODUTO inner join tb_setor dir ON dir.ID_SETOR = sa.SETOR WHERE substring(pr.NOME_PRODUTO, 15, 1)in('y', 'C', 'M') GROUP BY dir.NOME_SETOR,sa.DATA_SAIDA ) C full join ( SELECT sa.DATA_SAIDA, dir.NOME_SETOR setor, SUM(QUANTIDADE) Preto FROM [CONTROLE].[dbo].[tb_PRODUTO] pr inner join tb_SAIDA sa ON pr.ID_PRODUTO = sa.ID_PRODUTO inner join tb_setor dir ON dir.ID_SETOR = sa.ID_SETOR WHERE substring(NOME_PRODUTO, 15, 1) = 'K' or substring(NOME_PRODUTO, 16,1) = 'L' GROUP BY DIR.NOME_SETOR,sa.DATA_SAIDA ) P ON C.setor = P.setor ) SELECT setor , isnull (preto, 0) Preto, isnull (colorido,0) Colorido, isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER -- View total de Produto mensal CREATE VIEW v_Total_Mensal as SELECT CASE WHEN MONTH(DATA_SAIDA) = 01 THEN 'Janeiro' WHEN MONTH(DATA_SAIDA) = 02 THEN 'Fevereiro' WHEN MONTH(DATA_SAIDA) = 03 THEN 'Março' WHEN MONTH(DATA_SAIDA) = 04 THEN 'Abril' WHEN MONTH(DATA_SAIDA) = 05 THEN 'Maio' WHEN MONTH(DATA_SAIDA) = 06 THEN 'Junho' WHEN MONTH(DATA_SAIDA) = 07 THEN 'Julho' WHEN MONTH(DATA_SAIDA) = 08 THEN 'Agosto' WHEN MONTH(DATA_SAIDA) = 09 THEN 'Setembro' WHEN MONTH(DATA_SAIDA) = 10 THEN 'Outubro' WHEN MONTH(DATA_SAIDA) = 11 THEN 'Novembro' WHEN MONTH(DATA_SAIDA) = 12 THEN 'Dezembro' end Mes, DATEPART(YEAR,GETDATE()) Ano, NOME_SETOR setor, QUANTIDADE Quantidade FROM tb_SAIDA sa INNER JOIN tb_setor dir ON sa.ID_setor = dir.ID_setor
GOSTEI 0
Alex Lekao
21/10/2013
passa me passa alguns inserts tambem por favor.
vou criar um banco de testes aqui e ver o que consigo.
vou criar um banco de testes aqui e ver o que consigo.
GOSTEI 0
Simone
21/10/2013
insert into tb_setor values('TI'),('RH'),('Adm') insert into tb_estoque values( 1,'LEXMARK C792X1YG', 5, 10), -- Tonner Colorido ( 1,'LEXMARK LEXMARK X654X11L', 5, 10) -- Tonner Preto insert into tb_TIPO_PRODUTO values ('Tonner') insert into tb_controle_estoque values (1, getdate(), 1, 1)
GOSTEI 0
Alex Lekao
21/10/2013
Obrigado.
ta dando erro na criacao da view, acho que faltou alguma coisa...
estou vendo o que pode ser e ajustando para ver se consigo cria-la...
acho que o problema esta na CTE, mas estou vendo o que consigo.
ta dando erro na criacao da view, acho que faltou alguma coisa...
estou vendo o que pode ser e ajustando para ver se consigo cria-la...
acho que o problema esta na CTE, mas estou vendo o que consigo.
GOSTEI 0
Jefferson Santos
21/10/2013
Agora to livre no trabalho, vou tentar ajudar.
GOSTEI 0
Alex Lekao
21/10/2013
ta requerendo uma tb_saida, nao achei o codigo de criacao. rsrsrsr
se quiser, e ficar mais facil para vc adicione o meu msn(skype), alex_linhares_es@yahoo.com.br, talvez assim a gente consigo ir testando e ajustando mais rapidamente. rsrsr
se quiser, e ficar mais facil para vc adicione o meu msn(skype), alex_linhares_es@yahoo.com.br, talvez assim a gente consigo ir testando e ajustando mais rapidamente. rsrsr
GOSTEI 0
Alex Lekao
21/10/2013
Cola ai Jefferson, to apanhando... rsrsr
e aqui tao me parando toda hora nao consigo dar continuidade na linha de raciocinio. rsrsr
e aqui tao me parando toda hora nao consigo dar continuidade na linha de raciocinio. rsrsr
GOSTEI 0
Jefferson Santos
21/10/2013
Vou dar uma lida no tópico para ver o que ela precisa.
GOSTEI 0
Simone
21/10/2013
Obg Jefferson,
Alex, tenta esse
Vou te add no skype, assim que lembrar minha senha rs
Alex, tenta esse
VIEW [dbo].[v_Estoque] as with TONNER as ( SELECT case when isnull (c.setor, ' ') = ' ' then p.setor when isnull (p.setor, ' ') = ' ' then c.setor else ' ' end setor, p.Preto, c.Colorido FROM ( SELECT --substring(NOME_PRODUTO, 15, 1), sa.DATA_SAIDA, dir.NOME_SETOR setor, SUM(QUANTIDADE) Colorido FROM tb_PRODUTO pr inner join tb_controle_estoque sa ON pr.ID_PRODUTO = sa.ID_PRODUTO inner join tb_setor dir ON dir.ID_SETOR = sa.SETOR WHERE substring(pr.NOME_PRODUTO, 15, 1)in('y', 'C', 'M') GROUP BY dir.NOME_SETOR,sa.DATA_SAIDA ) C full join ( SELECT sa.DATA_SAIDA, dir.NOME_SETOR setor, SUM(QUANTIDADE) Preto FROM tb_PRODUTO pr inner join tb_controle_estoque sa ON pr.ID_PRODUTO = sa.ID_PRODUTO inner join tb_setor dir ON dir.ID_SETOR = sa.ID_SETOR WHERE substring(NOME_PRODUTO, 15, 1) = 'K' or substring(NOME_PRODUTO, 16,1) = 'L' GROUP BY DIR.NOME_SETOR,sa.DATA_SAIDA ) P ON C.setor = P.setor ) SELECT setor , isnull (preto, 0) Preto, isnull (colorido,0) Colorido, isnull (preto, 0) + isnull (colorido,0) Total FROM TONNER
Vou te add no skype, assim que lembrar minha senha rs
GOSTEI 0
Jefferson Santos
21/10/2013
Simone se não for pedir muito com base nas tabelas a cima que você postou e nos insert
o que você quer?
Vou montar o select buscando as informações e depois você cria o que quiser com eles.
Pode ser?
o que você quer?
Vou montar o select buscando as informações e depois você cria o que quiser com eles.
Pode ser?
GOSTEI 0
Simone
21/10/2013
Pode ser Jefferson.
Preciso gerar um relatorio mensal, que me informe a qtde de produto que cada setor solicitou, no caso de cima usei o tonner, temos tonner preto e colorido.
Estava me retornando duplicado, por ex.
O Setor de TI solicitou 1 tonner preto e 1 colorido, apareceu duas vezes, preciso que apareça
1 na coluna Preto e 1 na coluna Colorido, totalizando 2.
Isso com a ajuda do Alex consegui resolver, maaas agora, qdo insiro o tonner colorido, o setor some da coluna, aparece somente a qtde.
Obs: Isso só acontece com o tonner colorido.
Preciso gerar um relatorio mensal, que me informe a qtde de produto que cada setor solicitou, no caso de cima usei o tonner, temos tonner preto e colorido.
Estava me retornando duplicado, por ex.
O Setor de TI solicitou 1 tonner preto e 1 colorido, apareceu duas vezes, preciso que apareça
1 na coluna Preto e 1 na coluna Colorido, totalizando 2.
Isso com a ajuda do Alex consegui resolver, maaas agora, qdo insiro o tonner colorido, o setor some da coluna, aparece somente a qtde.
Obs: Isso só acontece com o tonner colorido.
GOSTEI 0
Alex Lekao
21/10/2013
oi Sinone,
eu consegui criar a View, mas tive que fazer alteracoes no codigo, pq tem duas tabelas que nao existem no banco e a view esta fazendo mencao nelas, a tb_produto, e a tb_saida.
com essa que vc postou agora eu tive que alterar novamente a tb_produto.
eu consegui criar a View, mas tive que fazer alteracoes no codigo, pq tem duas tabelas que nao existem no banco e a view esta fazendo mencao nelas, a tb_produto, e a tb_saida.
com essa que vc postou agora eu tive que alterar novamente a tb_produto.
GOSTEI 0
Jefferson Santos
21/10/2013
Samanta, desculpe a demora, estive enrolado no trabalho.
Esta consulta abaixo me retornou exatamente o que você queria com os insert que você colocou disponível.
Verifique agora no seu banco.
Esta consulta abaixo me retornou exatamente o que você queria com os insert que você colocou disponível.
Verifique agora no seu banco.
SELECT s.nome_setor , (CASE WHEN c.id_produto = '1' THEN 'Preto' ELSE 'Colorido' END )as Produto, quantidade = sum(quantidade) FROM tb_controle_estoque c INNER JOIN tb_setor s on s.id_setor = c.id_setor WHERE C.ID_SETOR = 1 GROUP BY s.nome_setor, (CASE WHEN c.id_produto = '1' THEN 'Preto' ELSE 'Colorido' END )
GOSTEI 0
Jefferson Santos
21/10/2013
Modo simplificado:
select DISTINCT(id_setor), id_produto, quantidade = sum(quantidade) from tb_controle_estoque where id_setor = 1 GROUP BY id_setor, id_produto
GOSTEI 0
Simone
21/10/2013
Modo simplificado:
select DISTINCT(id_setor), id_produto, quantidade = sum(quantidade) from tb_controle_estoque where id_setor = 1 GROUP BY id_setor, id_produto
Oi Jefferson, não é bem isso que eu preciso.
Desse jeito, me retornou assim ..
SETOR - Produto - Qtde
Adm - Colorido - 0
GOSTEI 0
Simone
21/10/2013
Modo simplificado:
select DISTINCT(id_setor), id_produto, quantidade = sum(quantidade) from tb_controle_estoque where id_setor = 1 GROUP BY id_setor, id_produto
Esse me retorna assim ..
ID_SETOR - ID_PRODUTO - QTDE
1 - 10 - 0
GOSTEI 0
Jefferson Santos
21/10/2013
Esse modo simplicado você pode alterar para um Inner Joing que lhe retorne o nome do produto e o setor.
Mais ele faz a soma da quantidade para você.
Eu utilizei as tabelas que você colocou disponível e realizei algumas saídas de produtos.
O código acima deste lhe retornou tudo certinho?
Mais ele faz a soma da quantidade para você.
Eu utilizei as tabelas que você colocou disponível e realizei algumas saídas de produtos.
O código acima deste lhe retornou tudo certinho?
GOSTEI 0
Simone
21/10/2013
Oi gente,
Com a ajuda do Alex, eu consegui.
Ficou assim ..
Muito obg a todos pela atenção.
Com a ajuda do Alex, eu consegui.
Ficou assim ..
select st.NOME_SETOR, isnull((select sum(sd.quantidade) from tb_SAIDA as sd left join tb_PRODUTO as p on p.ID_PRODUTO = sd.ID_PRODUTO where substring(p.NOME_PRODUTO,15,1) = 'y' and sd.ID_DIRE = st.ID_SETOR ),0) as preto, isnull((select sum(sd.quantidade) from tb_SAIDA as sd left join tb_PRODUTO as p on p.ID_PRODUTO = sd.ID_PRODUTO where substring(p.NOME_PRODUTO,15,1) <> 'y' and sd.ID_DIRE = st.ID_SETOR ),0) as colorido, isnull((select sum(sd.quantidade) from tb_SAIDA as sd left join tb_PRODUTO as p on p.ID_PRODUTO = sd.ID_PRODUTO where substring(p.NOME_PRODUTO,15,1) = 'y' and sd.ID_DIRE = st.ID_SETOR)+ (select sum(sd.quantidade) from tb_SAIDA as sd left join tb_PRODUTO as p on p.ID_PRODUTO = sd.ID_PRODUTO where substring(p.NOME_PRODUTO,15,1) <> 'y' and sd.ID_DIRE = st.ID_SETOR),0) as total from tb_SETOR as st group by st.ID_SETOR,st.NOME_SETOR order by st.NOME_SETOR
Muito obg a todos pela atenção.
GOSTEI 0