2017-07-17 2 views
1

J'essaie d'ajouter la valeur Percentile pour chaque enregistrement en tant que nouvelle colonne. Mais je reçois une erreur dans ma requête SQL. Quelqu'un peut-il s'il vous plaît aider à le résoudre.Erreur dans la requête SQL Server - jointure interne

Message d'erreur: Msg 156, niveau 15, état 1, ligne 3 Syntaxe incorrecte près du mot clé 'interne'. Msg 102, niveau 15, état 1, ligne 6 Syntaxe incorrecte proche de 'a'.

Select b.* , a.[Rank_1]/count(b.[Date]) * 100 as Percentile from 
    [Country_table1$] b where [Country] = 'AUSTRALIA' 
    inner join 
    (
select [MSCI_Price_idx], [Country], rank() OVER (PARTITION BY [Country] 
    ORDER BY [MSCI_Price_idx] DESC) AS [Rank_1] 
    from [Country_table1$] 
    GROUP BY [MSCI_Price_idx],[Country] 
) a 
ON a.[Country] = b.[Country] 
+2

Peut-être déplacer 'where [country] = 'AUSTRALIA'' sous votre ligne' ON A. [Pays] = b. [Pays] '? –

+0

Vous devriez rechercher la syntaxe de base pour les requêtes. Ensuite, vous réaliserez que la clause where est complètement au mauvais endroit. –

Répondre

2

Vous avez votre déclaration where au mauvais endroit. Les jointures font formellement partie de l'instruction from et viennent donc avant les critères. Pour avoir votre critère en bas vérifiez la table correcte, vous utilisez l'alias.

Select b.* , a.[Rank_1]/count(b.[Date]) * 100 as Percentile from 
    [Country_table1$] b 
    inner join 
    (
select [MSCI_Price_idx], [Country], rank() OVER (PARTITION BY [Country] 
    ORDER BY [MSCI_Price_idx] DESC) AS [Rank_1] 
    from [Country_table1$] 
    GROUP BY [MSCI_Price_idx],[Country] 
) a 
ON a.[Country] = b.[Country] 
    where b.[Country] = 'AUSTRALIA' 
+0

Merci beaucoup. Cela marche –