2016-09-26 63 views
0

我收到錯誤消息「錯誤:未解析對每個列名稱的表/相關名稱的引用時,我沒有使用完整的表名稱。使用完整的表名和得到相同的錯誤不知道還有什麼其他的嘗試 - 我對SQL很陌生,但仍然不太瞭解事情的工作方式錯誤:未解決的對錶/相關名稱(SAS,PROC SQL)的引用

這裏是日誌的副本:

171  PROC SQL; 
172  CREATE table Spillover AS select 
172  ! Y16_CALC_STUD.Student_ID,Y16_LINK_GM.score,Y16_CALC_STUD.StudSGP,Y16_CALC_STUD.g rade_subject_ID,Y16_LINK_GM.employeeID,Y1 
172  !  6_GROW_TEACHER.HEDI,Y16_GROW_TEACHER.HEDI_points,Y16_GROW_TEACHER.avg_prescore 
173  from (select Y16_CALC_STUD.Student_ID, Y16_CALC_STUD.StudSGP, Y16_CALC_STUD.CalcID, Y16_LINK_GM.school_DBN, 
173  ! Y16_LINK_GM.Score, Y16_LINK_GM.employeeID, Y16_LINK_GM.grade_subject_ID 
174  from Y16_CALC_Stud as a left join Y16_LINK_GM as link 
175  on link.Student_ID = link.Student_ID) 
176  as c left join Y16_GROW_Teacher as d on 
177  Y16_CALC_Stud.StudCalcID = Y16_GROW_Teacher.calcID and Y16_LINK_GM.employeeID=Y16_GROW_Teacher.employeeID and 
177  ! Y16_CALC_Stud.grade_subject_ID=Y16_GROW_Teacher.GRADE_SUBJECT; 
ERROR: Unresolved reference to table/correlation name Y16_CALC_Stud. 
ERROR: Unresolved reference to table/correlation name Y16_LINK_GM. 
ERROR: Unresolved reference to table/correlation name Y16_CALC_Stud. 
ERROR: Unresolved reference to table/correlation name Y16_CALC_STUD. 
ERROR: Unresolved reference to table/correlation name Y16_LINK_GM. 
ERROR: Unresolved reference to table/correlation name Y16_CALC_STUD. 
ERROR: Unresolved reference to table/correlation name Y16_CALC_STUD. 
ERROR: Unresolved reference to table/correlation name Y16_LINK_GM. 
ERROR: Expression using equals (=) has components that are of different data types. 
ERROR: Expression using equals (=) has components that are of different data types. 
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements. 

我得到了基地SAS和企業指南同樣的錯誤。

回答

0

修正通過刪除所有的別名,並使用下列內容:

所有的
PROC SQL; 
CREATE table Spillover AS select Y16_CALC_STUD.Student_ID,Y16_LINK_GM.score,Y16_CALC_STUD.StudSGP,Y16_CALC_STUD.g rade_subject_ID,Y16_LINK_GM.employeeID,Y16_GROW_TEACHER.HEDI,Y16_GROW_TEACHER.HEDI_points,Y16_GROW_TEACHER.avg_prescore 
from (select Y16_CALC_STUD.Student_ID, Y16_CALC_STUD.StudSGP, Y16_CALC_STUD.CalcID, Y16_LINK_GM.school_DBN, Y16_LINK_GM.Score, Y16_LINK_GM.employeeID, Y16_LINK_GM.grade_subject_ID 
from Y16_CALC_Stud left join Y16_LINK_GM 
on Y16_LINK_GM.Student_ID = Y16_LINK_GM.Student_ID) 
left join Y16_GROW_Teacher on 
Y16_CALC_Stud.CalcID = Y16_GROW_Teacher.calcID and Y16_LINK_GM.employeeID=Y16_GROW_Teacher.employeeID and Y16_LINK_GM.grade_subject_ID=Y16_GROW_Teacher.GRADE_SUBJECT; 
0

在SA S的proc sql,您可以參考您要在fromjoin語句中加入的數據集,而不是在您的select語句中。當您引用名爲Y16_CALC_STUD的庫並在該庫中使用名爲Student_ID的數據集時,SAS解釋爲Y16_CALC_STUD.Student_ID,這不是我認爲您在此嘗試執行的操作。因此,我只是用a,bc替換了所有這些數據集,並將其在代碼的from/join部分向下引用爲a,bc

PROC SQL; 
    CREATE table Spillover AS select 
     a.Student_ID, b.score, a.StudSGP, a.grade_subject_ID, b.employeeID, 
     c.HEDI, c.HEDI_points, c.avg_prescore 

     from Y16_CALC_STUD as a 
     left join Y16_LINK_GM as b 
     on a.Student_ID = b.Student_ID 
     left join Y16_GROW_Teacher as c 
     on a.StudCalcID = c.calcID and a.employeeID = c.employeeID and a.grade_subject_ID = c.GRADE_SUBJECT; 
quit; 
0

你的子查詢缺少關閉右括號和您所定義的結果,以使用別名像abc。但是在列表列中,您沒有使用您定義的別名。

可能最簡單的方法就是修復定義它們的別名,而不是更新列表中的每個引用。

(select Y16_CALC_STUD.Student_ID 
     , Y16_CALC_STUD.StudSGP 
     , Y16_CALC_STUD.CalcID 
from Y16_CALC_Stud 
) as Y16_CALC_Stud 
0

首先 - 你的代碼做了一個子查詢和您引用使用別名的子查詢 - 「C」。我已更新查詢,以便您的子查詢C包含正在主查詢中引用的「Y16_CALC_Stud.StudCalcID」。

除此之外,您的主要查詢是指具有主數據集名稱的變量, Y16_CALC_STUD.CalcId由於您提供了別名,因此必須將其引用爲c.CalcID。

最後,您說的錯誤「使用等於(=)的表達式具有不同數據類型的組件。」是因爲您使用的連接條件是不同的數據類型。例如「c.grade_subject_ID = Y16_GROW_Teacher.GRADE_SUBJECT」,c.grade_subject_id和Grade_subject都可能有不同的數據類型。一個可能是數字,另一個可能是字符。加入前您必須輸入演員名稱。

PROC SQL; 
    CREATE table Spillover AS 
select c.Student_ID, 
    c.score, 
    c.StudSGP, 
    c.grade_subject_ID, 
    c.employeeID, 
    d.HEDI, 
    d.HEDI_points, 
    d.avg_prescore 

    from 
    (select 
     Y16_CALC_STUD.Student_ID, 
     Y16_CALC_STUD.StudSGP, 
     Y16_CALC_STUD.CalcID, 
     Y16_LINK_GM.school_DBN, 
     Y16_LINK_GM.Score, 
     Y16_LINK_GM.employeeID, 
     Y16_LINK_GM.grade_subject_ID, 
     Y16_CALC_Stud.StudCalcID 
    from Y16_CALC_Stud as a 
left join Y16_LINK_GM as link on a.Student_ID = link.Student_ID) as C 
    left join Y16_GROW_Teacher as d on c.StudCalcID = Y16_GROW_Teacher.calcID 
and c.employeeID = Y16_GROW_Teacher.employeeID 
and c.grade_subject_ID = Y16_GROW_Teacher.GRADE_SUBJECT; 

以上查詢應解決除數據類型問題外的所有錯誤。