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 Diego-SLP
      Bom dia,
       
      Teria como eu fazer um UPDATE na minha base colocando através de um FORM o VALOR_UNITARIO sendo que a QUANTIDADE já tenho na base de dados, e assim, atualizar o campo VALOR FINAL já? 
       
      Vou atualizar varios registros de uma vez.
    • By adrianno
      Boa noite, tenho a seguinte questão, tenho uma tabela com  campo  "valor"  que guarda um valor monetário e campo "data" com a data do lançamento e um campo "tipo" marcando se é entrada ou saida,  ao cadastrar um valor, coloco a data e qual tipo "entrada" ou "saida"    quero montar uma view que soma todos os valores por mês, separados por tipo, se é entrada ou saida.   A seguinte query me tras a soma, porém não agrupa pelo MES/ANO
      SELECT DATE_FORMAT(data, "%m/%Y") as MES, (select Sum(valor) from controle WHERE tipo = 'SAIDA' ) as VS, // soma tudo que for SAIDA (select Sum(valor) from controle WHERE tipo = 'ENTRADA' ) as VE // soma tudo que for ENTRADA FROM controle GROUP BY YEAR(data), MONTH(data) // agrupa por ANO/MES mas este grupo nao opera nas somas dos valores ORDER BY data DESC  Esta query  somas os valores  mas não filtra pelo mes/ano e tras a soma total de tudo ignorando o mes,  mostra o mesmo valor total de cada tipo em todos os meses:
      EXEMPLO DO RESULTADO
      MES                 VS(saida)     VE(entrada)
      06/2020         4600,00        9750,00
      05/2020         4600,00        9750,00
      04/2020         4600,00        9750,00
       
      Na prática cada mês deveria retornar as somas dos valores apenas dele. Como fazer com que  GROUP BY YEAR(data), MONTH(data)   tenha efeito correto em cada tipo?   
    • By junior3d
      Estudo há poucos dias PHP e gostaria de saber no trecho abaixo por que usa-se o bindValue para jogar o conteúdo da variável na sql do método prepare do PDO?
      segue o trecho:
      $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES (:n, :t, :e, :s)"); $sql->bindValue(":n",$nome); $sql->bindValue(":t",$telefone); $sql->bindValue(":e",$email); $sql->bindValue(":s",$senha); $sql->execute(); Por que não poderia assim?
      $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES ($nome, $telefone, $email $senha)"); $sql->execute();  
    • By sirrocha
      Pessoal, tenho duas tabelas. Uma se chama prestacoes e a outra despesas.
      Cada prestação criada gera um id_prestacao que é único para cada uma gerada. Dentro da tabela despesas, se eu registro, por exemplo, 4 despesas, ficarão:
       
      id_prestacao = 1, 1, 1, 1
      id_despesa = 1, 2, 3, 4
       
      -> Cada despesa tem um valor, ao qual está na tabela despesas com o nome precoDespesa.
       
      -> O que eu gostaria é de poder, na tabela prestacoes, somar o valor destas despesas e colocar na coluna "valor_total" para cada id_prestacao gerado.
       
      Qual seria a maneira mais adequada de fazer isto, e que eu poderia compreender a estrutura criada para fazer essa "filtragem"
       
      UPDATE prestacoes SET valor_total = (
          SELECT SUM(precoDespesa) FROM despesas
          ORDER BY id_prestacao
      )
       
      Na tabela despesas, tenho atualmente
      id_prestacao - id_despesa - Valor
      1 - 1 - 30
      1 - 2 - 40
      1 - 3 - 30
       
      Com essa tentativa, vamos supor que tenho a tabela prestações:
      id_prestacao - projeto - ValorTotal
      1 - Projeto A - 100 
      2 - Projeto B - 100
      3 - Projeto C - 100
       
      Ou seja, o valor total do somatório para o id_prestação está vindo como 100 (até ai tudo bem), porém não está filtrando na tabela prestações onde deve ser colocado. O 100, nesse caso, deveria ficar apenas na primeira linha, sendo os valores totais de B e C igual a 0.
    • By Rafael Castelhano
      Olá, tenho 4 tabelas com a seguinte estrutura:
      OCORRENCIAS
      Data Pasta TERCEIROS
      Pasta Acordo CUSTOS
      Pasta Valor COBRANCAS
      Pasta Valor Todas as tabelas relacioanadas pelo campo Pasta. Preciso montar uma consulta que mostre na mesma linha, para cada pasta a soma dos acordos (tabela TERCEIROS), a soma dos valores da tabela CUSTOS, e a soma dos valores da tabela COBRANCAS, o resultado seria algo como:
      --
      Data                   Pasta          Acordos              Custos       Cobrancas
      17/05/2020       55                 850                       320                 50
      --
      Meu select está desta forma
      SELECT OCORRENCIAS.Data, OCORRENCIAS.Pasta, SUM(TERCEIROS.Acordo) AS Acordos, SUM(CUSTOS.Valor) AS Custos, SUM(COBRANCAS.Valor) AS Cobrancas FROM ((OCORRENCIAS INNER JOIN TERCEIROS ON OCORRENCIAS.Pasta = TERCEIROS.Pasta) LEFT JOIN CUSTOS ON OCORRENCIAS.Pasta = CUSTOS.Pasta) LEFT JOIN COBRANCAS ON OCORRENCIAS.Pasta = COBRANCAS.Pasta GROUP BY OCORRENCIAS.Data, OCORRENCIAS.Pasta; O Problema é que ele multiplica o valor dos acordos pra cada ocorrência na tabela cobranças (por exemplo).
       
      Alguma dica pra resolver o problema?
×

Important Information

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