如何将SQL查询导出到SPSS中?
我用T-SQL编写了这个怪物查询,它将多个表中的数据汇集在一起并进行处理。我可以很容易地将结果导出到CSV或Excel,但我想直接将其发送到SPSS。SPSS中的ODBC驱动程序只能识别SQL数据库中的表和视图。你知道如何将我的查询结果输入SPSS吗 选项:如何将SQL查询导出到SPSS中?,sql,sql-server,tsql,spss,Sql,Sql Server,Tsql,Spss,我用T-SQL编写了这个怪物查询,它将多个表中的数据汇集在一起并进行处理。我可以很容易地将结果导出到CSV或Excel,但我想直接将其发送到SPSS。SPSS中的ODBC驱动程序只能识别SQL数据库中的表和视图。你知道如何将我的查询结果输入SPSS吗 选项: 导出到Excel,然后导入到SPSS。。。格式化日期之类的东西会变得很麻烦 将查询另存为数据库中的表。。。但是,每次运行查询时,我都必须创建一个新表,是吗 按照下面的建议,只需在我的SPSS语法的getdata语句中运行我的SQL语句,但
- 导出到Excel,然后导入到SPSS。。。格式化日期之类的东西会变得很麻烦
- 将查询另存为数据库中的表。。。但是,每次运行查询时,我都必须创建一个新表,是吗
- 按照下面的建议,只需在我的SPSS语法的
语句中运行我的SQL语句,但我正在努力解决这个问题getdata
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的最佳方法。在我的例子中,(值(N'BAS1',BAS1)
必须更改为(值(“BAS1',BAS1”)
但是我的所有命令,例如outer apply
,union
等,运行起来都像champs!感谢您的帮助。您可以使用过程在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)".
SQL由ODBC驱动程序处理,因此该驱动程序的功能将决定可以发布哪种类型的SQL。这些功能可能是特定于数据库的。有时,特定数据库有多个可用的驱动程序,一些来自IBM SPSS数据访问包,一些直接来自数据库供应商,因此您可能希望为您的特定数据库选择可用的内容。谢谢@djhurio,但我的qry以SPSS似乎无法识别的语句开始。
以AS(sql\u子查询\u语句)从[,tablename][WHERE]中选择列\u列表
我同意@JKP。这不是SPSS的问题。它应该与您正在使用的ODBC数据驱动程序有关。您是否收到错误消息?检查SQL语句的翻译是否正确。请特别注意每行末尾或开头的空格。请参阅帮助,它收到的错误消息是警告。命令名:get data>SQLExecDirect失败:[Microsoft][ODBC SQL Server驱动程序][SQL Server]“N”附近的语法不正确。
但我一辈子都搞不清楚哪个N是问题所在。我可以使用ODBC代码连接到表和视图,没有问题。我可以发布我的SQL查询代码,用于SPSS。我是在这里这样做还是编辑我的原始问题?请通过编辑q,将SPSS代码与获取数据
语句一起添加uestion.谢谢,@JKP.可能这是个问题。我正在使用SPSS的机构许可证,试图通过IBM SPSS网站下载更多驱动程序,但由于无法获得所有许可证,因此遭到了阻碍。如果我无法在SPSS中调用我的查询,还有其他选择吗?
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".