2010-11-08 3 views
1

Je sais que cette question a été affichée à plusieurs reprises, mais après 1 heure sur Google je ne peux toujours pas obtenir ce travailL'identifiant plusieurs parties columnName ne pouvait pas être lié

SELECT 
    ROW_NUMBER() OVER(ORDER BY x.Year DESC, x.Month) AS ID, 
    x.*, 
    Finance.fGetRates(x.XTimeStamp) 
FROM 
    ( SELECT Client, 
       Month(TimeStamp) As Month, 
       Year(TimeStamp) As Year, 
       Day(TimeStamp) As Day, 
       (dateadd(yy,(Year(TimeStamp)-1900),0) 
       + dateadd(mm,Month(TimeStamp)-1,0) 
       + Day(TimeStamp)-1) AS XTimeStamp, 
       Sum(KwTop) As KwTop, 
       Sum(KwHeap) as KwHeap, 
       Sum(KwLow) As KwLow 
     FROM Ori.vEnergyUnion 
     GROUP BY Year(TimeStamp), Month(TimeStamp),Day(TimeStamp), Client 
    ) x 

LEFT OUTER JOIN Finance.fGetRates(x.XTimeStamp) Fr 
    ON Fr.ValidFrom = x.XTimeStamp 
ORDER BY Fr 

Msg 4104, Niveau 16, État 1, ligne 19 L'identificateur en plusieurs parties "x.XTimeStamp" n'a pas pu être lié.

Toute aide serait appréciée, Merci.

+0

Depuis le numéro de la ligne, qui mentionne 'x.XTimeStamp' est le message d'erreur référence? – AakashM

+0

Je pense que c'est "INNER JOIN Finance.fGetRates (x.XTimeStamp) Fr" que je reçois ce type marqué si je double-clique sur le message d'erreur. – Emil

Répondre

3

Vous ne pouvez pas passer les paramètres aux fonctions sur JOIN.

Utilisation APPLY:

SELECT ROW_NUMBER() OVER(ORDER BY x.Year DESC, x.Month) AS ID, 
     x.*, 
     fr.* 
FROM (
     SELECT Client, 
       Month(TimeStamp) As Month, 
       Year(TimeStamp) As Year, 
       Day(TimeStamp) As Day, 
       (dateadd(yy,(Year(TimeStamp)-1900),0) 
       + dateadd(mm,Month(TimeStamp)-1,0) 
       + Day(TimeStamp)-1) AS XTimeStamp, 
       Sum(KwTop) As KwTop, 
       Sum(KwHeap) as KwHeap, 
       Sum(KwLow) As KwLow 
     FROM  Ori.vEnergyUnion 
     GROUP BY 
       Year(TimeStamp), Month(TimeStamp),Day(TimeStamp), Client 
     ) x 
OUTER APPLY 
     (
     SELECT * 
     FROM Finance.fGetRates(x.XTimeStamp) Fr 
     WHERE fr.ValidFrom = x.XTimeStamp 
     ) fr 
Questions connexes