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

(Resolvido) Base SQL - Select com clausulas


Felipe Leocadio

Pergunta

Bom Dia,

Estou com uma pequena duvida,

Segue abaixo a tabela que eu tenho, tentarei explicar o melhor possivel.

CO CR Grupo

1 2 1

2 3 2

5 7 3

6 7 3

9 10 4

9 11 5

14 16 6

15 16 6

16 17 7

16 18 8

16 19 9

por favor, reparem que o Grupo 1 tem CO = 1 e CR = 2

Já no grupo 2 eu tenho CO = 2 e CR = 3

Porém, os dois tem o valor "2" em Comum.

Eu preciso juntar todos os grupos que tiverem um valor em comum, para o grupo de menor valor.`

Por favor, se alguém souber uma select que faça isso usando o exemplo dessa tabela eu fico muito feliz, pois a tabela que estou trabalhando é MUITO grande mas segue o mesmo Algoritmo dessa.

Devo estar muito mal de Lógica, rsrs,

Obrigado galera.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Felipe,

Para ver se os valores se repetem, você terá que fixar um a um e ir comparando.

No seu exemplo, os Grupos estão em ordem crescente. Caso, na tabela principal não esteja nesta ordem, será necessário criar uma tabela temporária e inserir os dados ordenados. Será necessário também criar uma coluna Indetity para controle.

Dá uma olhada no exemplo que diz e vê se é isso que precisa. O código está comentado.

-- Sua tabela
create table #Tmp (CO INT, CR int, Grupo INT, Controle INT IDENTITY)

-- Inserção dos dados
INSERT INTO #tmp VALUES (1, 2, 1)
INSERT INTO #tmp VALUES (2, 3, 2)
INSERT INTO #tmp VALUES (5, 7, 3)
INSERT INTO #tmp VALUES (6, 7, 3)
INSERT INTO #tmp VALUES (9, 10, 4)
INSERT INTO #tmp VALUES (9, 11, 5)
INSERT INTO #tmp VALUES (14, 16, 6)
INSERT INTO #tmp VALUES (15, 16, 6)
INSERT INTO #tmp VALUES (16, 17, 7)
INSERT INTO #tmp VALUES (16, 18, 8)
INSERT INTO #tmp VALUES (16, 19, 9)

-- Selecionar daqui até no fim.
DECLARE @ValorCO INT
DECLARE @ValorCR INT
DECLARE @Contador INT
DECLARE @MenorGrupo INT

SET @Contador = 1

WHILE @Contador <= (SELECT MAX(Controle) FROM #Tmp)  
BEGIN
    SET @ValorCO = (SELECT top 1 co FROM #Tmp WHERE Controle=@Contador)
    SET @ValorCR = (SELECT top 1 cr FROM #Tmp WHERE Controle=@Contador)
    DELETE #Tmp WHERE CO=@ValorCO AND Controle<>@Contador
    DELETE #Tmp WHERE CR=@ValorCR AND Controle<>@Contador
    DELETE #Tmp WHERE CR=@ValorCO AND Controle<>@Contador
    DELETE #Tmp WHERE CO=@ValorCR AND Controle<>@Contador
    SET @Contador = @Contador + 1
END


-- Conferência dos dados
select * from #Tmp

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...