Ir para conteúdo

Arquivado

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

mr22robot

Select com condição

Recommended Posts

Estou com uma dúvida. É possível determinar um select a partir de uma escolha?
Ex. 

SELECT
CASE
  WHEN a < b THEN select * from tabela1
  WHEN d < e THEN select * form tabela2
END
FROM tabela;

Algo parecido. Se uma condição for atendida select1 , se outra condição for atendida: select2.

O que acontece: estou com um relatorio que preciso criar no winthor e não consigo melhorar isso. Tenho de fazer três relatorios como solução. Se eu consigo implantar isso, eu faria somente um relatorio. 

Tipo se marcar um campo, sai um relatorio. Se marcar outro, saí outro relatorio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os relatórios seriam muito diferentes ?

Explique melhor o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No sistema winthor existe uma rotina que me permite criar relatorios.  Eu preencho o código(select), ele me traz os dados e me premite montar um relatorio com os dados trazidos pelo select.
O que acontece: quando eu monto um relatorio por exemplo de todas as vendas no período entre datas, a rotina me permite criar um tipo de variável colocando um ' : ' antes de qualquer palavra. exe:    ':data1'.

ex:

SELECT vlvendainicial, vlvendatotal FROM pcvendas  WHEN dtvendas BETWEENS :data1 AND :data2

O problema é: se eu preciso criar um relatorio em que alem de filtrar os valores entre datas, tambem escolha se quer ou não os valore maior que R$100,00, eu preciso criar um outro relatorio. Então o que eu queria saber é se é possível fazer o seguinte:

 

IF :resp = 'S' THEN
  SELECT * FROM  teste

ELSIF :resp = 'N' THEN
   SELECT * FROM TESTE2 
END IF;

Mais ou menos isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este winfor não permite criar uma outra variável para valor informado ?

 

Algo como

 

 

Where

....

And valor >= :valor

 

 

Informaria zero para todos

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 15/01/2019 at 21:44, mr22robot disse:

No sistema winthor existe uma rotina que me permite criar relatorios.  Eu preencho o código(select), ele me traz os dados e me premite montar um relatorio com os dados trazidos pelo select.
O que acontece: quando eu monto um relatorio por exemplo de todas as vendas no período entre datas, a rotina me permite criar um tipo de variável colocando um ' : ' antes de qualquer palavra. exe:    ':data1'.

ex:


SELECT vlvendainicial, vlvendatotal FROM pcvendas  WHEN dtvendas BETWEENS :data1 AND :data2

O problema é: se eu preciso criar um relatorio em que alem de filtrar os valores entre datas, tambem escolha se quer ou não os valore maior que R$100,00, eu preciso criar um outro relatorio. Então o que eu queria saber é se é possível fazer o seguinte:

 


IF :resp = 'S' THEN
  SELECT * FROM  teste

ELSIF :resp = 'N' THEN
   SELECT * FROM TESTE2 
END IF;

Mais ou menos isso

 

Bom dia.

Acredito que o problema nem seja esse. O problema é que as condições no Oracle não me permite retornar um select inteiro igual eu mostrei no exemplo. 
Ou há alguma forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria ?

SELECT vlvendainicial, vlvendatotal 
FROM  pcvendas  
WHERE dtvendas BETWEEN :data1 AND :data2
AND   vlvendatotal >= :valor

Infornado o valor de corte
Atente a síntaxe do SQL !

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FabianoSouza
      Eu preciso exibir duas informações em minha consulta:
      1) A quantidade de pessoas inscritas numa turma de treinamento (isso é feito com um simples COUNT)
      2) Uma flag de excesso de inscrições na turma. Seria obtido pela comparação entre a quantidade máxima permitida (já existe esse campo) e o COUNT feito acima.
       
      Até aqui sem problemas.
       
      O que quero é evitar fazer duas contagens (1 para saber a quantidade de inscritos, e outra para gerar a flag de excesso de inscrições).
       
      Há uma forma de utilizar UMA contagem para atender as duas necessidades?
       
      Meu código está assim:
       
      ... --AQUI FAZ A COMPARAÇÃO PARA GERAR A FLAG DE EXCESSO DE INSCRIÇÕES , CASE WHEN (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) > T.lotacaoMax Then T.nome + '&nbsp;'+'<span class=%22icon-aviso fcolor-critico%22 style=%22font-size:18px%22 title=Excesso&nbsp;de&nbsp;inscrições></span>' --AQUI FAZ A CONTAGEM DE INSCRIÇÕES , (SELECT COUNT(*) FROM dbo.tab AS ITT WHERE ITT.codTurmaDeTreina = T.id) AS 'Inscrições'  
    • Por FabianoSouza
      Possuo uma coluna de data.
      Eu gostaria que os registros com datas futuras aparecessem no topo do meu select, em relação aos demais registros.
      Em seguida, gostaria que somente esses registros com datas futuras ficassem em ordem crescente.
      Algo como 
       
      João  | 16/11/2023
      Maria | 17/11/2023
      José  |  20/11/2023
       
      -----------------------------
      (demais registros da base)
      Antônio   |  20/05/2023
      Rosa        | 15/08/2023
      Cida         | 15/10/2022
      Pedro      |  20/05/2021
      Paulo      |  14/11/2020
       
      O select seria esse.
      select dbo.formataData(ET.dataInicial) AS 'data' FROM dbo.tab AS ET GROUP BY ET.dataInicial  
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
×

Informação importante

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