Ir para conteúdo
Fórum Script Brasil
  • 0

Retornar só quando todos os valores forem iguais


jotafe

Pergunta

Caros,

Tenho a seguinte situação, uma lista de funcionários, projetos e status.

Eu preciso de uma query que me retorne o nome do Funcionário, somente quando todos os status de seus projetos forem 100%

Ex.:

Func Projeto Status

João Projeto 1 100,00%

João Projeto 2 50,00%

João Projeto 3 50,00%

João Projeto 4 100,00%

Maria Projeto 5 100,00%

Maria Projeto 6 100,00%

Maria Projeto 7 100,00%

Maria Projeto 8 100,00%

José Projeto 9 50,00%

José Projeto 10 50,00%

José Projeto 11 50,00%

José Projeto 12 50,00%

No caso acima, a query so retornaria somente o nome da Maria.

Se precisarem de mais informações me digam.

Obrigado desde já.

João Fábio

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Bom dia João Fábio,

Para fazer isto, terá que pegar todas as ocorrências e verificar se elas estão todas com 100%. Terá que utilizar uma forma de comparação, para retornar o valor desejado.

Fiz um exemplo logo abaixo e espero que ajude:

-- criação de temporária
CREATE table #tabela (Func varchar(10), Projeto varchar(20), STATUS INT)  

-- inserção dos dados
INSERT INTO #tabela VALUES ('João','Projeto 1', 100)
INSERT INTO #tabela VALUES ('João','Projeto 2', 50)
INSERT INTO #tabela VALUES ('João','Projeto 3', 50)
INSERT INTO #tabela VALUES ('João','Projeto 4', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 5', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 6', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 7', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 8', 100)
INSERT INTO #tabela VALUES ('José','Projeto 9', 50)
INSERT INTO #tabela VALUES ('José','Projeto 10', 50)
INSERT INTO #tabela VALUES ('José','Projeto 11', 50)
INSERT INTO #tabela VALUES ('José','Projeto 12', 50)

-- verificação
SELECT * FROM #tabela

-- select com resultado desejado
SELECT Func FROM #tabela GROUP BY Func HAVING SUM(STATUS)=count(STATUS)*100

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia João Fábio,

Para fazer isto, terá que pegar todas as ocorrências e verificar se elas estão todas com 100%. Terá que utilizar uma forma de comparação, para retornar o valor desejado.

Fiz um exemplo logo abaixo e espero que ajude:

-- criação de temporária
CREATE table #tabela (Func varchar(10), Projeto varchar(20), STATUS INT)  

-- inserção dos dados
INSERT INTO #tabela VALUES ('João','Projeto 1', 100)
INSERT INTO #tabela VALUES ('João','Projeto 2', 50)
INSERT INTO #tabela VALUES ('João','Projeto 3', 50)
INSERT INTO #tabela VALUES ('João','Projeto 4', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 5', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 6', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 7', 100)
INSERT INTO #tabela VALUES ('Maria','Projeto 8', 100)
INSERT INTO #tabela VALUES ('José','Projeto 9', 50)
INSERT INTO #tabela VALUES ('José','Projeto 10', 50)
INSERT INTO #tabela VALUES ('José','Projeto 11', 50)
INSERT INTO #tabela VALUES ('José','Projeto 12', 50)

-- verificação
SELECT * FROM #tabela

-- select com resultado desejado
SELECT Func FROM #tabela GROUP BY Func HAVING SUM(STATUS)=count(STATUS)*100

Agora tenho outro problema seguindo na mesma linha, só que em vez do nome um ID Numerico (INT) e no Status um campo Varchar

Exemplo:

OS >> Complementar >> Status_Complemetar

101 >> 201 >> Fechada

101 >> 202 >> Aberta

101 >> 203 >> Aberta

102 >> 204 >> Fechada

102 >> 205 >> Fechada

102 >> 206 >> Fechada

102 >> 207 >> Fechada

102 >> 208 >> Fechada

103 >> 209 >> Fechada

103 >> 210 >> Aberta

103 >> 211 >> Aberta

103 >> 212 >> Em atendimento

Preciso que retorne somente as OS com todos Status_Complemetar "Fechado"

É possível?

Editado por jotafe
Link para o comentário
Compartilhar em outros sites

  • 0

rs... essa aí é mais complexa... mas vamos lá:

-- criação de temporária
CREATE table #tabela (OS int, Complementar INT, Status_Complemetar VARCHAR(10))  

-- inserção dos dados
INSERT INTO #tabela VALUES (101 , 201 , 'Fechada')
INSERT INTO #tabela VALUES (101 , 202 , 'Aberta')
INSERT INTO #tabela VALUES (101 , 203 , 'Aberta')
INSERT INTO #tabela VALUES (102 , 204 , 'Fechada')
INSERT INTO #tabela VALUES (102 , 205 , 'Fechada')
INSERT INTO #tabela VALUES (102 , 206 , 'Fechada')
INSERT INTO #tabela VALUES (102 , 207 , 'Fechada')
INSERT INTO #tabela VALUES (102 , 208 , 'Fechada')
INSERT INTO #tabela VALUES (103 , 209 , 'Fechada')
INSERT INTO #tabela VALUES (103 , 210 , 'Aberta')
INSERT INTO #tabela VALUES (103 , 211 , 'Aberta')
INSERT INTO #tabela VALUES (103 , 212 , 'Em atendimento')

-- verificação
SELECT * FROM #tabela

-- select com resultado desejado
SELECT OS FROM #tabela GROUP BY OS HAVING sum(CASE Status_Complemetar WHEN 'Fechada' THEN 1 ELSE 0 END)=COUNT(os)

Link para o comentário
Compartilhar em outros sites

  • 0

Caros, boa tarde!

Estou com o mesmo caso do João Fábio.

Exemplo:

OS, Status

101, Fechado

101, Aberto

101, Fechado

102, Aberto

102, Fechado

103, Fechado

103, Fechado

104, Aberto

104, Aberto

PS. OS INT, Status VARCHAR

Preciso que retorne somente 1 vez o 103 porque todos os 103 tem status fechado os outros não, porque tem pelo menos um aberto.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...