Inquiridor
Como se usa o OR exclusivo ?

Pergunta
-
Como se usa o OR exclusivo ?
Já deixei o Where de várias maneiras, e não consegui...
Tab. Teste
ano int
mes int
codP int
tipo char(2) values ('F','B','C')
SELECT ano, mes, codP, count(codP) FROM teste WHERE (tipo = 'F') ^ (tipo = 'B') ^ (tipo = 'C') GROUP BY ano, mes, codP ORDER BY ano, mes, codP
Ou seja, a lógica é a seguinte.
Para o codP = 1.
Ex1:
qdo houver apenas do tipo='F'
o count tem que retornar = 1
Ex2:
quando houver os 2 tipos (F,B)
o count tem que retornar = 1
Ex3:
quando houver os 3 tipos (F,B,C)
o count tem que retornar = 1
Obs: Não há como ter um codP e não ter um correspondente para o tipo.
-
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !- Movido Gustavo Maia Aguiar quinta-feira, 13 de agosto de 2009 19:08 (De:SQL Server - Desenvolvimento Geral)
Todas as Respostas
-
-
Diogo, isso ai !!!
Sim!!!
-
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
-
aNetão,
A possível solução é utilizar o operador lógico condicional chamado IN.
Este operador funcina como se fosse o operador OR, fazendo toda lógica condicional dentro dos valores passados a ele.
O exemplo do Leonardo é a forma básica para aplicação deste operador.
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
Desculpem !
Mas, não fizeram um teste simples como esse:
CREATE TABLE teste ( ano INT, mes INT , codP INT , tipo CHAR(1) ); INSERT INTO teste VALUES (2009,7,10,'F') INSERT INTO teste VALUES (2009,7,10,'B') INSERT INTO teste VALUES (2009,7,10,'C') INSERT INTO teste VALUES (2009,7,15,'F') INSERT INTO teste VALUES (2009,7,20,'C') INSERT INTO teste VALUES (2009,7,25,'F') INSERT INTO teste VALUES (2009,7,25,'B') select * from teste SELECT ano, mes, codP, count(codP) AS num FROM teste WHERE tipo IN ('F','B','C') --(tipo = 'F') ^ (tipo = 'B') ^ (tipo = 'C') GROUP BY ano, mes, codP ORDER BY ano, mes, codP
Resultado foi esse:
ano mes codP num
----------- ----------- ----------- -----------
2009 7 10 3
2009 7 15 1
2009 7 20 1
2009 7 25 2
Novamente, ..... gostaria que fosse esse resultado:
ano mes codP num
----------- ----------- ----------- -----------
2009 7 10 1
2009 7 15 1
2009 7 20 1
2009 7 25 1
-
Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew ! -
-
-
Boa Noite,
Ando muito ocupado e com absolutamente nenhum tempo para responder. Em todo caso, me interessei por essa dúvida, porque ela não é tão simples quanto parece. Maiores detalhes em:
A divisão relacional (quando o AND e o OR não funcionam)
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!360.entry
[ ]s,
Gustavo
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar quinta-feira, 13 de agosto de 2009 02:10