1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida SQL - Alias de SELECT?

Discussão em 'Programação' iniciada por Pure_Water, 9 de Dezembro de 2007. (Respostas: 11; Visualizações: 3762)

  1. Pure_Water

    Pure_Water Power Member

    Boas, tenho aqui o seguinte codigo:

    Código:
    SELECT nome
    FROM (SELECT p.nome, SUM(f.min_saida-f.min_entrada) AS Tempo 
    				  FROM Pessoa p, Jogador j, Joga f 
    				  WHERE p.pid = j.pid AND j.jid = f.jid 
    				  GROUP BY p.nome)
    WHERE Tempo = (SELECT MAX(Tempo) FROM (SELECT p.nome, SUM(f.min_saida-f.min_entrada) AS Tempo
    			   FROM Pessoa p, Jogador j, Joga f
    			   WHERE p.pid = j.pid AND j.jid = f.jid
    			   GROUP BY p.nome)); 	
    ora o que eu gostava de saber é se era possivel dar um alias por exemplo ao

    Código:
    (SELECT p.nome, SUM(f.min_saida-f.min_entrada) AS Tempo 
    				  FROM Pessoa p, Jogador j, Joga f 
    				  WHERE p.pid = j.pid AND j.jid = f.jid 
    				  GROUP BY p.nome)
    para assim n ter que repeti-lo dps uma segunda vez, tornando o codigo assim maior..Isso é possivel? é que ja pesquisei bastante no google mas n encontrei nada sobre isto :\ Ou há alguma outra maneira mais fácil de fzr?

    Cumps
     
  2. r3pek

    r3pek Power Member

    se o teu SGBD permitir, define isso como uma view.
     
  3. Pure_Water

    Pure_Water Power Member

    thkx pela dica ;) Realmente isso resolveria o meu problema, mas infelizmentes n tenho privilégios suficientes na universidades para usar criar VIEW's (embora aqui no oracle consiga, mas n sei se o poderei usar no trabalho ) :( bem, qualquer das maneiras ja fiquei a saber mais qualquer coisa (embora n possa usar :P ).

    thkx ;)
     
  4. kzip

    kzip Power Member

    Se bem percebi, queres saber o nome do que tem maior tempo. Eu faria assim:

    Código:
    SELECT TOP 1 p.nome, SUM(f.min_saida-f.min_entrada) AS Tempo
    FROM Pessoa p, Jogador j, Joga f 
    WHERE p.pid = j.pid AND j.jid = f.jid 
    GROUP BY p.nome
    ORDER BY SUM(f.min_saida-f.min_entrada) Desc
    Ou:

    Código:
    SELECT TOP 1 p.nome
    FROM Pessoa p, Jogador j, Joga f 
    WHERE p.pid = j.pid AND j.jid = f.jid 
    GROUP BY p.nome
    ORDER BY SUM(f.min_saida-f.min_entrada) Desc
     
    Última edição: 10 de Dezembro de 2007
  5. Conde

    Conde Power Member

    lol, Projecto de SIBD fase 4 :009:
     
  6. saunde

    saunde Power Member

  7. Pure_Water

    Pure_Water Power Member

    pois, eu antes ja tinha testado com o TOP mas n sei porque ao usar o TOP ele da-me erro (tanto para o 1º exemplo como para o 2º) :S

    Error starting at line 1 in command:
    SELECT TOP 1 p.nome, SUM(f.min_saida-f.min_entrada) AS Tempo
    FROM Pessoa p, Jogador j, Joga f
    WHERE p.pid = j.pid AND j.jid = f.jid
    GROUP BY p.nome
    ORDER BY SUM(f.min_saida-f.min_entrada) Desc
    Error at Command Line:1 Column:11
    Error report:
    SQL Error: ORA-00923: FROM keyword not found where expected
    00923. 00000 - "FROM keyword not found where expected"
    *Cause:
    *Action:

    Error starting at line 1 in command:
    SELECT TOP 1 p.nome
    FROM Pessoa p, Jogador j, Joga f
    WHERE p.pid = j.pid AND j.jid = f.jid
    GROUP BY p.nome
    ORDER BY SUM(f.min_saida-f.min_entrada) Desc
    Error at Command Line:1 Column:11
    Error report:
    SQL Error: ORA-00923: FROM keyword not found where expected
    00923. 00000 - "FROM keyword not found where expected"
    *Cause:
    *Action:

    thkx pela ajuda btw ;)

    y lol :P

    thkx, vou dar uma vista de olhos ;)
     
    Última edição pelo moderador: 11 de Dezembro de 2007
  8. JGAlmeida

    JGAlmeida Folding Colaborator

    Boas.

    Anda por aí alguma confusão.

    Afinal estás a usar T-SQL (sql server) ou PL-SQL (oracle)?
    É que o TOP não está a funcionar porque o oracle não usa disso. E a variavel "table" também é só sql server (salvo erro a partir do 2000)

    Vê lá o que queres usar, que fica mais facil ajudar.

    Cumps.
     
  9. Pure_Water

    Pure_Water Power Member

    estou a usar PL-SQL (oracle), pensei que ambos aceitassem a função TOP mas pelos vistos não... no Oracle existe algum "substituto" para o TOP?
     
  10. kzip

    kzip Power Member

  11. Pure_Water

    Pure_Water Power Member

    ya ja ficou a bombar:

    Código:
    SELECT p.nome
    FROM Pessoa p, Jogador j, Joga f 
    WHERE p.pid = j.pid AND j.jid = f.jid AND ROWNUM =1
    GROUP BY p.nome
    ORDER BY SUM(f.min_saida-f.min_entrada) Desc
    thkx a lot pela ajuda ;)
     
  12. E a função "max" tb podia dar jeito.
     

Partilhar esta Página