Jump to content

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.

Share this post


Link to post
Share on other sites

Os relatórios seriam muito diferentes ?

Explique melhor o problema.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

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

 

Algo como

 

 

Where

....

And valor >= :valor

 

 

Informaria zero para todos

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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 !

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 Priscila1307
      CREATE TABLE CLIENTE( Idcliente int, nome varchar(60), dtnascimento date, cpf varchar(11), CONSTRAINT pk_cliente PRIMARY KEY (Idcliente) ); CREATE TABLE PEDIDO( Idpedido int, Idcliente int, datapedido date, vltotal decimal(10,2), CONSTRAINT pk_pedido PRIMARY KEY (Idpedido), CONSTRAINT fk_pedido_cliente FOREIGN KEY (Idcliente) REFERENCES CLIENTE(Idcliente) ); CREATE TABLE PRODUTO( Idproduto int, descricao varchar(100), quantidade int, CONSTRAINT pk_produto PRIMARY KEY (Idproduto) ); CREATE TABLE ITEMPEDIDO( Idpedido int, Nritem int, valor decimal(10,2), quantidade int, Idproduto int, CONSTRAINT pk_itempedido PRIMARY KEY (Idpedido, Nritem), CONSTRAINT fk_Idpedido FOREIGN KEY (Idpedido) REFERENCES PEDIDO (Idpedido), CONSTRAINT fk_itempedido_produto FOREIGN KEY (Idproduto) REFERENCES PRODUTO (Idproduto) ); CREATE TABLE LOG( Idlog int, data date, descricao varchar(255), CONSTRAINT pk_log PRIMARY KEY (Idlog) ); INSERT INTO CLIENTE VALUES (1, 'Hugo Batista', TO_DATE('05/02/1990', 'DD/MM/YYYY'), '51898608253'); INSERT INTO CLIENTE VALUES (2, 'José Antonio', TO_DATE('02/05/1985', 'DD/MM/YYYY'), '51144722241'); INSERT INTO CLIENTE VALUES (3, 'João Carlos', TO_DATE('03/05/1993', 'DD/MM/YYYY'), '84882273292'); INSERT INTO CLIENTE VALUES (4, 'Edivaldo Santana', TO_DATE('01/06/2000', 'DD/MM/YYYY'), '30609426176'); INSERT INTO CLIENTE VALUES (5, 'Cristina Oliveira', TO_DATE('16/08/1999', 'DD/MM/YYYY'), '56313586700'); INSERT INTO CLIENTE VALUES (6, 'Artur da Silva', TO_DATE('06/05/2001', 'DD/MM/YYYY'), '67491246583'); INSERT INTO CLIENTE VALUES (7, 'Adrina Domingues', TO_DATE('01/02/1972', 'DD/MM/YYYY'), '22044617250'); INSERT INTO PRODUTO VALUES (1, 'SAMSUNG J7 - PRIME', 10); INSERT INTO PRODUTO VALUES (2, 'SAMSUNG J5 - PRIME', 10); INSERT INTO PRODUTO VALUES (3, 'IPHONE X', 10); INSERT INTO PRODUTO VALUES (4, 'MOTO G 5S', 10); INSERT INTO PRODUTO VALUES (5, 'IPHONE 6S', 10); INSERT INTO PEDIDO VALUES (1, 4, TO_DATE('10/03/2018', 'DD/MM/YYYY'), 1400.99); INSERT INTO ITEMPEDIDO VALUES (1, 1, 800.99, 1, 1); INSERT INTO ITEMPEDIDO VALUES (1, 2, 600.00, 1, 2); INSERT INTO PEDIDO VALUES (2, 2, TO_DATE('17/03/2018', 'DD/MM/YYYY'), 1349.50); INSERT INTO ITEMPEDIDO VALUES (2, 1, 749.50, 1, 4); INSERT INTO ITEMPEDIDO VALUES (2, 2, 600.00, 1, 2); INSERT INTO PEDIDO VALUES (3, 1, TO_DATE('20/03/2018', 'DD/MM/YYYY'), 2590.10); INSERT INTO ITEMPEDIDO VALUES (3, 1, 1800.71, 1, 5); INSERT INTO ITEMPEDIDO VALUES (3, 2, 789.39, 1, 4); INSERT INTO PEDIDO VALUES (4, 5, TO_DATE('21/03/2018', 'DD/MM/YYYY'), 2590.10); INSERT INTO ITEMPEDIDO VALUES (4, 1, 5099.00, 1, 3); INSERT INTO PEDIDO VALUES (5, 7, TO_DATE('10/03/2018', 'DD/MM/YYYY'), 1800.00); INSERT INTO ITEMPEDIDO VALUES (5, 1, 600.00, 3, 2); "Crie um select que exibe quais são os três PRODUTOS com a maior quantidade de PEDIDOS. Exiba o nome e o código do produto"
       
      Oi pessoal. por favor preciso da ajuda de vocês . 
      Eu queria criar um SELECT que exiba os três PRODUTOS com a maior quantidade de PEDIDOS.
      Retornando nome do produto ( PRODUTO.DESCRICAO )  e  o código dele ( PRODUTO.IDPRODUTO )
       
      Eu tentei das seguintes formas mas não consegui . estou novinha ainda em oracle
       
       
      SELECT PRODUTO.DESCRICAO, PRODUTO.IDPRODUTO, ITEMPEDIDO.QUANTIDADE FROM ITEMPEDIDO, PEDIDO, PRODUTO WHERE ITEMPEDIDO.IDPEDIDO = PEDIDO.IDPEDIDO AND PRODUTO.IDPRODUTO = ITEMPEDIDO.IDPRODUTO GROUP BY IDPRODUTO  
      neste código só roda sem erro se eu tirar o GROUP BY IDPRODUTO.  Mas não gera o resultado esperado 

       
      SELECT ITEMPEDIDO.IDPRODUTO, COUNT(*) AS VENDIDO FROM ITEMPEDIDO GROUP BY IDPRODUTO ORDER BY VENDIDO DESC  
       
      Aqui eu até consegui chegar perto mas não consegui acrescentar o nome do produto ( que é PRODUTO.DESCRICAO) e o produto com idproduto 2 ( que é o J5 ) não são só 3 vendidos. SÃO 5 !!! ai ai ai ai
       
      ....e apos muita batalha eu consegui fazer isso ... que tbm ainda não é o ideal
       
      SELECT * FROM (SELECT ITEMPEDIDO.IDPRODUTO, COUNT(*) AS VENDIDO FROM ITEMPEDIDO GROUP BY IDPRODUTO ORDER BY VENDIDO DESC) WHERE ROWNUM <4  

       
      ... demorei horrores pra fazer esse WHERE ROWNUM <4  rodar sem erro... pois é pessoal. só historia triste ! kkkkk
       
       
      Agora estou tentando esse aqui mas não terminei 
       
      SELECT PRODUTO.DESCRICAO AS NOME, ITEMPEDIDO.IDPRODUTO FROM PRODUTO, ITEMPEDIDO WHERE PRODUTO.IDPRODUTO = ITEMPEDIDO.IDPRODUTO
       
       
      acabei parando no meio do caminho e decidi recorrer ao imasters ! 
       
      vou continuar tentando ... sera que consigo antes de alguem aparecer aqui ? rsrsrs
       
      obrigada ! boa sorte pessoal.
       
       
       
      ah ! já ia esquecendo estou usando o livesql.oracle.com
       
      e vou deixar aqui tbm a consulta das tabelas 
       
       

    • By Giovanird
      Estou quebrando a cabeça para fazer uma consulta em 2 colunas da mesma tabela.
      Preciso retornar a NOTA1 e NOTA2 consultando ambas colunas e listar sem repetir as notas vinculadas com cada série.

      TABELA ALUNOS
      COD |    CODSERIE  |  DATACADASTRO  |  NOTA1  |  NOTA2  
      1       |    2                  |  01/08/2021           |  5            |  3
      2       |    1                  |  11/08/2021           |  3            |  5
      3       |    2                  |  12/08/2021           |  5            |  3
      4       |    3                  |  15/08/2021           |  3            |  1
      5       |    2                  |  15/08/2021           |  5            |  3
      6       |    3                  |  18/08/2021           |  4            |  5
      7       |   2                   |  22/08/2021           |  2            |  3
      8       |   1                   |  12/08/2021           |  1            |  3
      9       |   2                   |  25/08/2021           |  5            |  6

      RETORNAR:
      SERIE 1
      Nota: 3
      Nota: 5
      Nota: 1
       
      SERIE 2
      Nota: 5
      Nota: 3
      Nota: 2
      Nota: 6
       
      SERIE 3
      Nota: 3
      Nota: 1
      Nota: 4
      Nota: 5
       
      Aqui tenho um foreach de outra tabela que devolve o codigo das séries e as notas para consulta foreach($rsserie as list($varserie,$varnota1,$varnota2)){ SELECT nota1, nota2 FROM alunos WHERE codserie like '$varserie' and (nota1 = '$varnota1' or nota1 = '$varnota2' or nota2 = '$varnota1' or nota2 = '$varnota2') Group by nota1, nota2 }  
    • By Kefatif
      Prezados, boa tarde.
       
      Utilizo um banco de dados Mysql + Programação PHP e HTML.
       
      Preciso que no filtro do sql ele não me traga o estoque do CNES "0000000", como eu poderia ta excluindo ele do filtro?
       
       
      $sqlestoque = "select A.ID_ESTOQUE, D.CNES, D.NOME_UNIDADE, B.COBERTURA, A.QTD, C.DATA_REGISTRO FROM lesao_rel_estoque_coberturas A INNER JOIN lesao_coberturas B ON A.ID_COBERTURA = B.ID_COBERTURA INNER JOIN lesao_estoque C ON A.ID_ESTOQUE = C.ID_ESTOQUE INNER JOIN unidades D ON C.CNES = D.CNES WHERE C.ID_ESTOQUE = (SELECT MAX(E.ID_ESTOQUE) FROM lesao_estoque E WHERE E.CNES = C.CNES) ORDER BY A.ID_ESTOQUE DESC";  
      Agradeço a ajuda desde já.
       
      Muito obrigado!
    • By lezão
      Bom dia, galera!
      Tudo bem com vcs?
       
      Tenho uma tabela Itens com os campos Descrição e nome do produto, quando eu coloco no select.
      Eu gostaria que me retorna-se, todos os nomes dos produtos e retornar apenas uma vez a Descrição.
       
      Select com ORDER BY
      "SELECT DISTINCT c.id, c.descricao, i.id_categoria, i.descricao_produto, i.id_item, i.nome_produto, i.imagem, i.preco, i.qntdade FROM tab_categoria AS c JOIN tab_itens AS i ON c.id = i.id_categoria WHERE c.id = i.id_categoria AND i.id_empresa = '$id_empresa' ORDER BY c.descricao" Select com GROUP BY,  até da certo, mas retorna apenas um produto.
      "SELECT DISTINCT c.id, c.descricao, i.id_categoria, i.descricao_produto, i.id_item, i.nome_produto, i.imagem, i.preco, i.qntdade FROM tab_categoria AS c JOIN tab_itens AS i ON c.id = i.id_categoria WHERE c.id = i.id_categoria AND i.id_empresa = '$id_empresa' GROUP BY c.descricao"  
      Veja como esta ficando do jeito que eu estou fazendo, com ORDER BY
      Select_com_ORDER_BY  
       
      E com o GROUP BY
      Select_com_GROUP_BY
       
    • By gamesmax2
      Boa noite,
      Pessoal estou com uma dificuldade no MYSQL, estou querendo obter dados de um cadastro caso ele tenha preenchido todos os Campos, tentei usar o Group by mas não tive sucesso.
       
      Minha tabela e a seguinte:
       
      Nome.              Pedido.            Status
      Daniel.              9955.                 Ok
      Daniel.              9954                  Ok
      Rafael.              9940                  Ok
      Rafael.              9941.                 Aberto
      Rafael.              9942.                 Ok
      Rodrigo.            9961.                 Ok
      Rodrigo.            9962.                 Ok
       
       
      Meu objetivo e puxar os nomes que estão com todos o pedidos relacionado em ok, no caso o Rafael não pode aparece pois ele tem um pedido Aberto, porém não conseguir fazer isso, pessoal peco a ajuda de VCS muito o obrigado.
       
      tentei isso aqui: SELECT nome, pedido, status FROM `cadastros` GROUP BY pedido, nome having status = 'Ok'
×

Important Information

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