sobreda Posted May 20, 2014 at 01:02 AM Report #556323 Posted May 20, 2014 at 01:02 AM Olá Preciso de fazer um query em que o resultado são as medalhas(ouro,prata,bronze e total(soma das 3)) obtidas por cada país em todas edições dos jogos olímpicos. Até aqui tudo bem, a query abaixo apresentada já faz isso. O problema é que as medalhas obtidas em eventos colectivos(estafeta,etc) só podem ser contadas 1 vez, ou seja , No caso de um evento de estafeta em vez de contar 4 medalhas contar apenas 1. É possível saber se um evento é do tipo colectivo ou individual através da tabela eventos no campo TIPOEVENTO, porque este campo ou é Individual ou Colectivo. Penso que seja possível fazer através de uma Subquery com um count(distinct) mas não sei como. Obrigado. Diagrama: Resultado até agora Select PAISES.NOMEPAIS, count(RESULTADOS.CLASSIFICACAO) as Total, Count(Case when RESULTADOS.CLASSIFICACAO = 1 then 1 end) As OURO, Count(Case when RESULTADOS.CLASSIFICACAO = 2 then 1 end) As PRATA, Count(Case when RESULTADOS.CLASSIFICACAO = 3 then 1 end) As BRONZE From RESULTADOS INNER JOIN PARTICIPACOES ON RESULTADOS.ANO = PARTICIPACOES.ANO AND RESULTADOS.ESTACAO = PARTICIPACOES.ESTACAO AND RESULTADOS.IDPARTICIPACAO = PARTICIPACOES.IDPARTICIPACAO INNER JOIN dbo.PAISES ON PARTICIPACOES.SIGLAPAIS = PAISES.SIGLAPAIS INNER JOIN dbo.PARTICIPANTES ON PARTICIPACOES.IDPARTICIPANTE = PARTICIPANTES.IDPARTICIPANTE INNER JOIN dbo.EDICOES ON PARTICIPACOES.ANO = EDICOES.ANO AND PARTICIPACOES.ESTACAO = EDICOES.ESTACAO INNER JOIN dbo.ELIMINATORIAS ON RESULTADOS.IDEVENTO = ELIMINATORIAS.IDEVENTO AND RESULTADOS.IDELIMINATORIA = ELIMINATORIAS.IDELIMINATORIA group by NOMEPAIS order by Total desc
M6 Posted May 21, 2014 at 09:40 AM Report #556438 Posted May 21, 2014 at 09:40 AM Podes ter uma abordagem naive à coisa e fazer duas queries "iguais", uma para individuais e outra para equipas e depois juntares com um Union All 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
sobreda Posted May 21, 2014 at 11:26 AM Author Report #556457 Posted May 21, 2014 at 11:26 AM Mas o problema é que toda a estrutura da base de dados é referente a conquistas individuais. É preciso fazer uma query que determinada forma consiga perceber que um determinado numero de atletas, participou no mesmo evento, da mesma edição e ano e que sejam do mesmo país. Fazendo um union all acho que apenas iria juntar todos registos individuais com os colectivos.
sobreda Posted May 21, 2014 at 02:31 PM Author Report #556481 Posted May 21, 2014 at 02:31 PM Já cheguei a um resultado., deixo aqui a resposta Select A.NOMEPAIS, count(A.RESULTADO) as Total, Count(Case when A.RESULTADO = 1 then 1 end) As OURO, Count(Case when A.RESULTADO = 2 then 1 end) As PRATA, Count(Case when A.RESULTADO= 3 then 1 end) As BRONZE From ( SELECT DISTINCT PAISES.NOMEPAIS AS NOMEPAIS, RESULTADOS.CLASSIFICACAO AS RESULTADO, EVENTOS.IDEVENTO AS IDEVENTO, EVENTOS.TIPOEVENTO AS TIPOEVENTO, PARTICIPACOES.ANO AS ANO FROM RESULTADOS INNER JOIN dbo.PARTICIPACOES ON RESULTADOS.IDPARTICIPACAO = PARTICIPACOES.IDPARTICIPACAO INNER JOIN dbo.PAISES ON PARTICIPACOES.SIGLAPAIS = PAISES.SIGLAPAIS INNER JOIN dbo.EVENTOS ON RESULTADOS.IDEVENTO = EVENTOS.IDEVENTO ) AS A group by A.NOMEPAIS order by Total desc
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now