Dúvida SQL - Alias de SELECT?

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
 
se o teu SGBD permitir, define isso como uma view.

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 ;)
 
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:
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

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 ;)

lol, Projecto de SIBD fase 4 :009:

y lol :P

Em T-sql dá para guardar isso numa variável tipo TABLE. E depois podias usar onde kiseres..

Tipo isto :

http://www.odetocode.com/Articles/365.aspx

thkx, vou dar uma vista de olhos ;)
 
Última edição pelo moderador:
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.
 
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?
 
Back
Topo