Somando Campo - Trigger

SQL Server

21/10/2013

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.

Simone

Simone

Curtidas 0

Respostas

Mariana Carvalho

Mariana Carvalho

21/10/2013

Simone, posta o script.
GOSTEI 0
Simone

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
GOSTEI 0
Alex Lekao

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
GOSTEI 0
Simone

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




GOSTEI 0
Alex Lekao

Alex Lekao

21/10/2013

Oi Bom dia!!!

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

Simone

21/10/2013

Oi Bom dia!!!

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

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.
GOSTEI 0
Simone

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.

GOSTEI 0
Alex Lekao

Alex Lekao

21/10/2013

nao...

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

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

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?
GOSTEI 0
Simone

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

Simone

21/10/2013

Alex, o problema em relação a aparição de Null, na coluna Colorido eu consegui consertar, usando o COALESCE.

       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

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?
GOSTEI 0
Simone

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

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.
GOSTEI 0
Simone

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

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.
GOSTEI 0
Jefferson Santos

Jefferson Santos

21/10/2013

Agora to livre no trabalho, vou tentar ajudar.
GOSTEI 0
Alex Lekao

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
GOSTEI 0
Alex Lekao

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
GOSTEI 0
Jefferson Santos

Jefferson Santos

21/10/2013

Vou dar uma lida no tópico para ver o que ela precisa.
GOSTEI 0
Simone

Simone

21/10/2013

Obg Jefferson,
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

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?
GOSTEI 0
Simone

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.
GOSTEI 0
Alex Lekao

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.
GOSTEI 0
Jefferson Santos

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.

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

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

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

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

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?
GOSTEI 0
Simone

Simone

21/10/2013

Oi gente,
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
POSTAR