Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将SQL查询导出到SPSS中?_Sql_Sql Server_Tsql_Spss - Fatal编程技术网

如何将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语句,但

我用T-SQL编写了这个怪物查询,它将多个表中的数据汇集在一起并进行处理。我可以很容易地将结果导出到CSV或Excel,但我想直接将其发送到SPSS。SPSS中的ODBC驱动程序只能识别SQL数据库中的表和视图。你知道如何将我的查询结果输入SPSS吗

选项:

  • 导出到Excel,然后导入到SPSS。。。格式化日期之类的东西会变得很麻烦
  • 将查询另存为数据库中的表。。。但是,每次运行查询时,我都必须创建一个新表,是吗
  • 按照下面的建议,只需在我的SPSS语法的
    getdata
    语句中运行我的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的最佳方法。在我的例子中,
(值(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".