Jump to content
otaviinn

Trazer o valor de uma 1º coluna se a condição de uma 2º coluna for verdadeira

Recommended Posts

Olá a todos, 

 

Estou desenvolvendo um script simples, porém me deparei com uma situação que sei que pode ser resolvida através do If, mas acredito que possa existir uma maneira mais simples (e talvez mais correta) de se fazer, é o seguinte:

 

Com um select simples preciso trazer as colunas Nome, RG,ORGAOEXP, DATAEXP, CPF, DATANASC e o telefone CELULAR do cliente, ai que está o problema, pois a estrutura da tabela encontra-se assim:

FORMACONTATO1	FORMACONTATO2	FORMACONTATO3	CONTATO1	CONTATO2	CONTATO3
-----------     -------------   --------------  ----------  ----------- ------------
Residencial	 Celular	 Comercial	1122443355	11945678910  1122433456

 

Então, eu devo trazer o CONTATO 2 que é o contato correspondente a FORMA DE CONTATO de celular, no sistema estes campos são editaveis, então isso varia de cadastro para cadastro, tem registro que o contato 1 é o celular, em outros o 3 e assim por diante.

 

Existe alguma forma de trazer somente o contato correspondente a forma de contato CELULAR sem ser pelo If?

 

Agradeço a atenção e colaboração de todos.

 

Share this post


Link to post
Share on other sites

Como que se identifica um celular?
você pode fazer um case no where,,,

case then campo like '9%' then campoA else 1 end

 

uma ideia 

Share this post


Link to post
Share on other sites

Obrigado por sua resposta! 

 

É identificado pela coluna FORMADECONTATO, se coluna FORMADECONTATO1 estiver o registro como "CELULAR" isso significa que o número da coluna CONTATO1 é um celular.

 

O problema que estou encontrando é no select, pois não quero trazer os três telefones (CONTATO1,CONTATO2 e CONTATO3) quero trazer somente a coluna correspondente a FORMADECONTATO "celular".

 

Caso não tenha sido claro peço desculpas, novamente, obrigado!

Share this post


Link to post
Share on other sites
23 minutos atrás, A.Jr disse:

Como que se identifica um celular?
você pode fazer um case no where,,,

case then campo like '9%' then campoA else 1 end

 

uma ideia 

 

Obrigado por sua resposta! 

 

É identificado pela coluna FORMADECONTATO, se coluna FORMADECONTATO1 estiver o registro como "CELULAR" isso significa que o número da coluna CONTATO1 é um celular.

 

O problema que estou encontrando é no select, pois não quero trazer os três telefones (CONTATO1,CONTATO2 e CONTATO3) quero trazer somente a coluna correspondente a FORMADECONTATO "celular".

 

Sou novato em banco de dados, pode me explicar um exemplo de case no where?

 

Muito obrigado!

Share this post


Link to post
Share on other sites

Pesquise por CASE , talvez a solução para sua query

 

 

algo como

 

(case when formacontato1='celular' then contato1 else ' ' end) c1

 

---------

 

Sua sql fica complexa pois o modelo não esta bom 

 

Se o modelo fosse

 

 

cliente

----------

cod_cliente

nome_cliente

cpf_cliente

 

contato

------------

cod_cliente

sequencial

tipo_contato

contato

 

tipo_contato

--------------------

tipo_contato

nome_contato

 

seria mais simples

 

 

 

Share this post


Link to post
Share on other sites

Otaviin,

 

A estrutura do banco não está da mais adequada, no entanto, conseguirá extrair o resultado dessa forma:

 

DECLARE @TABELA TABLE(
FORMACONTATO1 VARCHAR(MAX),
FORMACONTATO2 VARCHAR(MAX),
FORMACONTATO3 VARCHAR(MAX),
CONTATO1 VARCHAR(MAX),
CONTATO2 VARCHAR(MAX),
CONTATO3 VARCHAR(MAX))

 

INSERT INTO @TABELA
SELECT 'RESIDENCIAL', 'Celular', 'Comercial', '1122443355', '11945678910', '1122433456'


SELECT CASE WHEN LEN(CONTATO1) = 11 THEN CONTATO1
WHEN LEN(CONTATO2) = 11 THEN CONTATO2
WHEN LEN(CONTATO3) = 11 THEN CONTATO3 END CELULAR 
FROM @TABELA WHERE FORMACONTATO2 = 'CELULAR'

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By edvaldo joviano de paula
      Prezados, boa tarde!
      Preciso de uma ajuda sendo possível:
       
      Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3)
      select codkit, produtos from kit where codkit = 1
      ---   ----
      1    2
      1    3
      Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo:
      kit 1 (2,3)
      kit 4 (2,10)
      kit 5 (3,11).
       
      Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4.
       
      Espero ter explicado de forma a ser entendido e agradeço a ajuda.
       
    • By Viniciusr9
      Boa tarde pessoal,
      Sei que tem varios tópicos sobre esse erro, porém analisei todos e nenhum foi aplicável ao meu caso ( a maioria era porquê o pessoal esquecia do Group By ao final das Querys) . 
      Se alguém puder ajudar, agradeço . Os campos sem função estão inseridos no group by, porém o erro persiste .
       
       

       
      SELECT * FROM( select LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO, E.DS_EQUIPE as EQUIPE, SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) as "ESFORÇO CALCULADO" from EQUIPE E, COLABORADOR C1, COMPETENCIA C, COMPETENCIA_COLABORADOR CC, AUSENCIAS AU where E.CD_EQUIPE=CC.CD_EQUIPE and C.CD_COMPETENCIA=CC.CD_COMPETENCIA and C1.CD_COLABORADOR=CC.CD_COLABORADOR and C1.STATUS = 1 AND C1.CD_GESTOR <> C1.CD_COLABORADOR AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR GROUP BY E.DS_EQUIPE, LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA ) VT WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))  
    • By pauloozan
      De acordo com o mer abaixo,responda os seguintes exercicios :
       
      1-      A quantidade de pedidos feitos para clientes da cidade de tupã
      2-      A media de valor gasto por cliente
      3-      O Total vendido de cada produto
      4-      A quantidade vendida de cada categoria
      5-      O total gasto de cada categoria
      6-      O maior pedido de cada categoria
      7-      O menor pedido de cada categoria
      8-      O cliente que mais gastou
      9-      O cliente que menos gastou
      10-   O produto mais vendido entre cliente que moram em Tupã

    • By vinihhylian0103
      Boa noite, gostaria de saber tem alguma maneira de prevenir a inclusão de registros do mesmo valor na minha tabela. O código é o seguinte:
       
       
       
      <?php include_once('conexao.php'); $nome=$_POST['nome']; $sobrenome=$_POST['sobrenome']; $data=$_POST['data_nasc']; $rm=$_POST['rm']; $curso=$_POST['curso']; $email=$_POST['email']; $senha=$_POST['senha']; $sqlinsert = "insert into usuarios(nome, sobrenome, data_nasc, rm, curso, email, senha) values('$nome','$sobrenome','$data','$rm','$curso','$email','$senha')"; $resultado = @mysqli_query($conexao,$sqlinsert); if(!$resultado) { die('Query inválida: '. @mysqli_error($conexao)); } else { echo "<script type='text/javascript'>alert('Cadastro Concluído!');</script>"; header('Location: index.html'); } mysqli_close($conexao); ?>
          
       
    • By Viniciusr9
      Script com retorno de dias uteis no mês ( desconsiderando finais de semana e feriados também ( os mesmos cadastrados em uma tabela )), ajuda!
       
      Boa tarde,
      alguém poderia me ajudar , tentei com alguns que vi pela net , fazendo alterações mas não consegui o que gostaria ainda. Preciso de um script que dado um valor (mês/ano) ele retorne a quantidade de dias uteis nesse mês, desconsiderando os sabados e domingos e os feriados listados na tabela de feriados, em Oracle Sql puro ou PL/SQL  . Agradeço pela ajuda!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.