Comment exporter une requête SQL dans SPSS?

J'ai cette requête monstre écrite en T-SQL qui rassemble et croque datatables de plusieurs tables. Je peux exporter le résultat au format CSV ou Excel assez facilement, mais je voudrais l'envoyer directement dans SPSS. Les pilotes ODBC dans SPSS reconnaissent uniquement les tables et les vues dans ma database SQL. Des idées pour get les résultats de ma requête dans SPSS?

Options:

  • Exporter vers Excel puis importer vers SPSS … formater des choses comme les dates deviennent difficiles à manier
  • Enregistrer la requête en tant que table dans ma database … mais alors je devrais faire une nouvelle table chaque fois que j'exécute la requête, oui?
  • Comme recommandé ci-dessous, exécutez simplement mon instruction SQL dans l'instruction GET DATA de ma syntaxe SPSS, mais je me bats avec cela …

MISE À JOUR: Dans une tentative d'utiliser SPSS pour exécuter ma requête SQL, j'ai édité ce code et get cette erreur indiquant que SPSS n'aime pas ma déclaration de nvarchar (en train d'étudier comment gérer cela en utilisant une méthode alternative). J'ai testé ma connection entre SPSS et SQL et la connection est bonne:

 SQLExecDirect failed :[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'N'. 

Voici ma requête simplifiée pour tirer un seul champ d'une table:

 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. 

Merci à tous: Résolu. Il y a pas mal de réglages nécessaires pour que SPSS exécute une requête SQL, mais c'est le meilleur moyen d'exporter des données SQL dans SPSS. Dans mon cas (values (N'BAS1',BAS1) a dû être changé en (values ("BAS1",BAS1) mais toutes mes commands, par exemple outer apply , union , etc, couru comme des champions! Apprécier l'aide.

Vous pouvez utiliser la procédure GET DATA pour importer des données à partir de SQL directement dans SPSS. Voir la sous-command SQL . Vous pouvez utiliser votre requête compliquée ici. Par exemple:

 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)". 

Il est clair pourquoi (values (N'BAS1',BAS1) causé l'erreur parce que vous utilisez des guillemets simples pour l'argument de la sous-command \SQL = ' ' . Et le premier guillemet simple dans (values (N'BAS1',BAS1) définit la fin de l'argument.

J'ai essayé de réorganiser votre code. Je ne peux pas le tester, mais je crois que cela devrait fonctionner:

 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". 

Le SQL est traité par le pilote ODBC, donc les capacités de ce pilote détermineront quel type de SQL peut être émis. Les capacités peuvent être spécifiques à la database. Parfois, plusieurs pilotes sont disponibles pour une database particulière, certains d'IBM SPSS Data Access Pack et d'autres provenant directement d'un fournisseur de database. Vous pouvez donc searchr ce qui est disponible pour votre database particulière.