Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rmmtins

Buscar Usuario com varias classificações

Recommended Posts

Olá,

 

Tenho uma tabela onde o usuário cadastrado tem uma ID unica, mas possui uma ou mais classificações.

 

Exemplo:

 

Usuario ID = 1

Classificações = A,B,C

 

Usuario ID = 2

Classificações = A,B,C

 

Usuario ID = 3

Classificações = A,C

 

Quero fazer uma busca somente nos usuarios que possuem as classificações A e B (ambas)

 

Estava fazendo dessa maneira

 

Select ID from TABELA where CLASSIFICACAO = A and CLASSIFICACAO = B

 

Mas nao retorna resultado algum.

 

Desde já Agradeço

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor solução seria normalizar esta tabela.

 

Mas não estando normalizado, tente

where ...
AND
(CHARINDEX('A', CLASIFICACAO) > 0 
AND
CHARINDEX('B', CLASIFICACAO) > 0)

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela resposta Motta, acho que me expressei mal.

 

Vou colocar exatamente como minha tabela esta criada,

 

as classificações da minha tabela são

 

Tapetes, Lojas, Funcionarios, e etc.

 

Ficariam assim

 

USUARIO ID 1 Classificacoes = Tapetes, Lojas, Persiana

 

USUARIO ID 2 Classificacoes = Tapetes, Lojas

 

USUARIO ID 3 Classificacoes = Persiana, Lojas

 

Como faço a busca nessa caso?

 

USUARIO ID 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procurando quem tenha " Tapetes e Persiana"

where ...
AND
(CHARINDEX('Tapetes', CLASIFICACAO) > 0
AND
CHARINDEX('Persiana', CLASIFICACAO) > 0)

Mas repito, sugiro normalizar esta tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não creio ser o caso A Jr. no campo está gravado assim

id   classif
1    Tapetes, Lojas, Persiana
2    Tapetes, Lojas
3    Tapetes 
4    Lojas, Persiana
5    Tapetes, Lojas, Persiana
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Não creio ser o caso A Jr. no campo está gravado assim

id   classif
1    Tapetes, Lojas, Persiana
2    Tapetes, Lojas
3    Tapetes 
4    Lojas, Persiana
5    Tapetes, Lojas, Persiana
...

O que novamente esqueci de citar foi que cada classificação tem um valor numerico diferente, faço a busca pelo codigo de cada classificação e não pelo nome.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto pode complicar , o tamanho é fixo ou pode existir algo como os códigos 2,20 e 201 ?

2,21,201 

Com isto o CHARINDEX não vai funcionar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto pode complicar , o tamanho é fixo ou pode existir algo como os códigos 2,20 e 201 ?

2,21,201 

Com isto o CHARINDEX não vai funcionar

 

A cada nova classificacao criada no sistema o codigo da mesma e criado automaticamente no banco.

Te darei o exemplo de como esta minha tabela

 

 

Cod_Classificacao | Desc_Classificacao

1 Tapetes

2 Camas

3 Lojas

4 Caneta

 

faço a busca sempre pelo Cod_Classificacao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gera um complicador pois eu estva buscando uma string , mas supondo que exista um código

 

11 Cds virgem

 

Uma busca por "1" Tapete retornaria o 11 também.

 

Tente usar o comando UNPIVOT e abrir esta coluna

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou fazendo desta maneira

 

Minha Query

SELECT Top 3000 *, (Select top 1 txt_telefone 
                    from BNP_USUARIOS_TELEFONES 
                    where COD_USUARIO = bnp_usuario.COD_USUARIO ) as telefone 
FROM BNP_USUARIO 
WHERE COD_SEGMENTO = 1 
AND flag_cad = 1 
AND COD_USUARIO <> 10 
AND COD_USUARIO IN (Select cod_usuario , 
                           COUNT(Cod_Classificacao) AS CLASSIFICACAO 
                    from BNP_usuarios_classificacoes 
                    where 1=1 AND Cod_Classificacao in (223, 424) 
                    GROUP BY COD_USUARIO 
                    HAVING COUNT(Cod_Classificacao) > 1)

Fiz dessa maneira mas esta dando esse erro

Microsoft OLE DB Provider for SQL Server error '80040e14'
Only one expression can be specified in the select list when the 
subquery is not introduced with EXISTS.

informei errado a forma como minha tabela esta apresentada

o correto seria

id classif
1 Tapetes

1 Lojas

1 Persiana
2 Tapetes

2 Lojas

3 Tapetes
4 Lojas

3 Persiana
5 Tapetes

5 Lojas

5 Persiana

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT Top 3000 *, (Select top 1 txt_telefone
                    from BNP_USUARIOS_TELEFONES
                    where COD_USUARIO = bnp_usuario.COD_USUARIO ) as telefone
FROM BNP_USUARIO
WHERE COD_SEGMENTO = 1
AND flag_cad = 1
AND COD_USUARIO <> 10
AND COD_USUARIO IN (Select cod_usuario
                    from BNP_usuarios_classificacoes
                    where 1=1 AND Cod_Classificacao in (223, 424)
                    GROUP BY COD_USUARIO
                    HAVING COUNT(Cod_Classificacao) > 1)

tente assim

Mas pelo visto a tabela está normalizada.

 

No primeiro post leva a entender que não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.