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

Select de ID com varias ocorrencias


Nfrancisco

Pergunta

Boas pessoal, tenho uma tabela com a seguinte estrutura

XID | NUM | TIPO

5 5 L

3 8 S

1 4 C

1 5 D

7 5 C

Gostaria de obter o resultado 7 - C, ou seja apenas os XID que tem a ocorrência C e apenas a C.

SELECT XID, NUM, Tipo
FROM TAB
WHERE TIPO = 'D'

Isto apenas dá os resultados com D, todos eles.

Julgo ter que usar subqueries, mas não estou a conseguir fazer.

alguém poderá me ajudar?

Editado por Nfrancisco
Colocar código entre CODEs
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Oi 'Nfrancisco',

Poderia ser mais claro, por favor. XID que retorna 7 somante a última linha que tem a tupla (7, 5, C).

Obter a ocorrencia "D" como você solicitou em

XID que tem a ocorrência D e apenas a D
, você já conseguiu com o select que você apresentou.

Portanto não vejo lógica em seu questionamento.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi 'Nfrancisco',

Poderia ser mais claro, por favor. XID que retorna 7 somante a última linha que tem a tupla (7, 5, C).

Obter a ocorrencia "D" como você solicitou em

XID que tem a ocorrência D e apenas a D
, você já conseguiu com o select que você apresentou.

Portanto não vejo lógica em seu questionamento.

Antes de mais

Obrigado pela sua pronta disponibilidade para me ajudar.

Vou reformular, uma vez me expliquei mal.

Tabela

XID | NUM | TIPO

5 5 L

3 8 S

1 4 C

1 5 D

7 5 C

8 3 C

8 3 D

Nesta caso se fizer a instrução mencionada,

SELECT XID, NUM, Tipo

FROM TAB

WHERE TIPO = 'D'

vai retornar

XID | NUM | TIPO

1 5 D

8 3 D

O que eu pretendo é obter apenas os XID com o valor D, uma vez que o XID 1, tem os valores

1 4 C

1 5 D

O que eu pretendo é obter o valor

8 3 D

Uma vez que o XID 8 tem apenas um valor e é D.

Quero obter o XID 8 e todos os outros que apenas tem tipo D

Julgo que agora ficou mais claro. Na primeira solicitação coloquei mal o valor de retorno.

Link para o comentário
Compartilhar em outros sites

  • 0

'Nfrancisco'

Uma vez que o XID 8 tem apenas um valor e é D.

Quero obter o XID 8 e todos os outros que apenas tem tipo D

Julgo que agora ficou mais claro. Na primeira solicitação coloquei mal o valor de retorno.

com base no que entendi fiz o seguinte exemplo.

Criei uma tabela temporária em memória para armazenar os dados do exemplo.

CREATE TEMPORARY TABLE tab_xid(
xid INT,
num INT,
tipo CHAR(1)
)ENGINE MEMORY;
Carreguei os dados
INSERT INTO tab_xid(xid,num,tipo)
VALUES(5,5, 'L'),(3, 8, 'S'),(1, 4, 'C'),(1, 5, 'D'),(7, 5, 'C'),(9, 3, 'C'),(8, 3, 'D');
Separei em uma consulta somente os dados em XID que tivessem apenas uma ocorrencia
SELECT xid
FROM tab_xid 
GROUP BY xid
HAVING COUNT(xid)=1;
Criei a consulta para que selecionasse os dados que tem o tipo "D"
SELECT x1.xid, x1.num, x1.tipo 
FROM tab_xid x1
WHERE x1.tipo = 'D' AND x1.xid IN (SELECT x2.xid
    FROM tab_xid x2
    GROUP BY x2.xid
    HAVING COUNT(x2.xid) = 1
    );

Link para o comentário
Compartilhar em outros sites

  • 0
'Nfrancisco'
Uma vez que o XID 8 tem apenas um valor e é D.

Quero obter o XID 8 e todos os outros que apenas tem tipo D

Julgo que agora ficou mais claro. Na primeira solicitação coloquei mal o valor de retorno.

com base no que entendi fiz o seguinte exemplo.

Criei uma tabela temporária em memória para armazenar os dados do exemplo.

CREATE TEMPORARY TABLE tab_xid(
xid INT,
num INT,
tipo CHAR(1)
)ENGINE MEMORY;
Carreguei os dados
INSERT INTO tab_xid(xid,num,tipo)
VALUES(5,5, 'L'),(3, 8, 'S'),(1, 4, 'C'),(1, 5, 'D'),(7, 5, 'C'),(9, 3, 'C'),(8, 3, 'D');
Separei em uma consulta somente os dados em XID que tivessem apenas uma ocorrencia
SELECT xid
FROM tab_xid 
GROUP BY xid
HAVING COUNT(xid)=1;
Criei a consulta para que selecionasse os dados que tem o tipo "D"
SELECT x1.xid, x1.num, x1.tipo 
FROM tab_xid x1
WHERE x1.tipo = 'D' AND x1.xid IN (SELECT x2.xid
    FROM tab_xid x2
    GROUP BY x2.xid
    HAVING COUNT(x2.xid) = 1
    );

Obrigado pelo exemplo. Falta apenas um pormenor. Na tabela real, podem existir mais do XID com valor D.

O coódigo em anexo apenas responde se houver apenas uma. Segue o exemplo abaixo.

Tabela

XID | NUM | TIPO

5 5 L

3 8 S

1 4 C

1 5 D

7 5 C

8 3 D

8 5 D

1 8 F

8 9 D

O que preciso pegar é apenas o XID - 8. Porque tem D, sem apresentar outros valores. Independentemente do numero de ocorrências, o que preciso de pegar é o XID que apenas tem o Tipo D.

Mais uma vez, Obrigado Denis Courcy.

Link para o comentário
Compartilhar em outros sites

  • 0
Tente assim:

SELECT x1.xid, x1.num, x1.tipo 
FROM tab_xid x1
WHERE x1.xid = 8 AND x1.tipo = 'D'

Obrigado pela sugestão, mas essa não vai solucionar. Assim vou pegar 8 e D. O que preciso pegar é todos os XID, com resultado D, apenas e só D, podendo o XID ser igual e o NUM diferente, mas apenas com tipo D.

Se tiver o XID 8. com tipo D, repetido, preciso pegar. Mas se tiver XID 8 e o Tipo D e C, em registos diferentes, já não me interessa. A condição necessária é os XID que apenas apresentam tipo D, embora o mesmo possa estar repetido, em registos "linhas" diferentes.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...