我有一个用T-SQL编写的怪物查询,它将多个表中的数据结合在一起并进行处理。我可以很容易地将结果导出到CSV或Excel,但是想将其直接发送到SPSS。 SPSS中的ODBC驱动程序仅识别SQL数据库中的表和视图。有任何想法如何将我的查询结果导入SPSS?
选项:
GET DATA
语句中运行我的SQL语句,但我正在努力... 更新:为了尝试使用SPSS来运行我的SQL查询,我编辑了这段代码并得到此错误,表明SPSS不喜欢我的nvarchar声明(目前正在研究如何使用替代方法处理此问题)。我测试了SPSS和SQL之间的连接,连接很好:
SQLExecDirect failed :[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'N'.
这是我的查询简化,只从一个表中提取一个字段:
GET DATA
/TYPE=ODBC
/CONNECT='DSN=temp_Hisp;Description=tempHisp;UID=;Trusted_Connection=Yes;APP=IBM SPSS '+
'Products: Statistics Common;WSID=ARCH5-50;DATABASE=temp_HispTreat'
/SQL='With CTE_BASENG As (Select StudyID, Visit, Question, CAST(Response As Int) As RESPONSE from temp_HispTreat.dbo.BAS AS PVTable outer apply (values (N'BAS1',BAS1), +'
'(N'BAS24',BAS24)) P(Question, Response)) select SubVis.IRB#, SubVis.StudyID, SubVis.Clin_num, Subvis.Visit, BASENG.BAS_ENGTOT From (Select Distinct IRB#, StudyID, +'
'Clin_Num, Visit_ID As Visit from temp_HispTreat.dbo.Subjects, temp_HispTreat.dbo.StudyStructure where subjects.IRB# = 5516 and StudyStructure.IRB = 5516) As SubVis left join (Select StudyID, +'
'Visit, SUM (Scoring.dbo.GetValue9(response)) As BAS_ENGTOT from CTE_BASENG group by StudyID, Visit) AS BASENG On SubVis.Studyid = BASENG.StudyID And SubVis.Visit = BASENG.Visit'
/ASSUMEDSTRWIDTH=255.
CACHE.
EXECUTE.
谢谢大家:解决了。让SPSS运行SQL查询需要进行相当多的调整,但这是将SQL数据导出到SPSS的最佳方法。在我的情况下,(values (N'BAS1',BAS1)
必须更改为(values ("BAS1",BAS1)
但我的所有命令,例如outer apply
,union
等,像冠军一样跑!感谢帮助。
答案 0 :(得分:3)
您可以使用GET DATA过程直接在SPSS中导入SQL数据。请参阅SQL
子命令。您可以在此处使用复杂的查询。例如:
GET DATA
/TYPE = ODBC
/CONNECT = "DSN = DSNname"
/SQL = "SELECT * FROM empl_data "
"WHERE ((bdate>=#1/1/1960# and edate<=#12/31/1960#) or bdate is null)".
很明显为什么(values (N'BAS1',BAS1)
导致错误。因为您使用单引号作为SQL子命令\SQL = ' '
的参数。 (values (N'BAS1',BAS1)
中的第一个单引号定义了参数的结束。切换到双引号可以解决它。
我试图重新安排您的代码。我无法测试它,但我相信它应该可行:
GET DATA
/TYPE = ODBC
/CONNECT = "DSN=temp_Hisp;DATABASE=temp_HispTreat"
/SQL = "With CTE_BASENG As (Select StudyID, Visit, Question, "
"CAST(Response As Int) As RESPONSE "
"from temp_HispTreat.dbo.BAS AS PVTable "
"outer apply (values (N'BAS1',BAS1), (N'BAS24',BAS24)) "
"P(Question, Response)) "
"select SubVis.IRB#, SubVis.StudyID, SubVis.Clin_num, Subvis.Visit, "
"BASENG.BAS_ENGTOT "
"From (Select Distinct IRB#, StudyID, Clin_Num, Visit_ID As Visit "
"from temp_HispTreat.dbo.Subjects, temp_HispTreat.dbo.StudyStructure "
"where subjects.IRB# = 5516 and StudyStructure.IRB = 5516) As SubVis "
"left join (Select StudyID, Visit, "
"SUM(Scoring.dbo.GetValue9(response)) As BAS_ENGTOT "
"from CTE_BASENG group by StudyID, Visit) AS BASENG On "
"SubVis.Studyid = BASENG.StudyID And SubVis.Visit = BASENG.Visit".
答案 1 :(得分:1)
SQL由ODBC驱动程序处理,因此该驱动程序的功能将决定可以发出什么类型的SQL。功能可能是特定于数据库的。有时,特定数据库可以使用多个驱动程序,其中一些来自IBM SPSS Data Access Pack,另一些来自数据库供应商,因此您可能需要调查可用于特定数据库的数据库。