2017-10-03 1 views
0

Chunks je le code suivant dans SQL:SQL Déplacer vue sur gérables

SELECT 
    (SELECT Form_Title 
    FROM Forms 
    WHERE Form_ID = (SELECT TOP 1 Form_ID 
         FROM [Form_Responses] 
         WHERE [Form_Response_ID] = [Form_Response_ID])) AS Form_Name 
FROM 
    [FooDb].[dbo].[Submissions] 

Essentiellement, je suis la sélection des données trois tables « loin » et l'imbrication de toutes ces sélections. Je sélectionne donc un champ d'une table et l'utilise pour faire une sélection dans une autre.

Je ne peux pas utiliser de vars dans une vue, alors comment est-ce que je peux le rendre lisible à distance?

Edition - le pseudocode ci-dessous est ce que je visais avec le SQL ci-dessus et il fonctionne, mais je ne sais pas comment faire propre, et c'est la question:

//Form_Response_ID exists on Submissions 
SELECT Get_Query_Result(Form_Response_ID) as Form_Name 
FROM Submissions 

Get_Query_Result(Form_Response_ID)() { 
    return SELECT Form_Title FROM Forms WHERE Form_ID = Get_Form_Id(Form_Response_ID); 
} 

// Form_Responses has Form_Response_ID as well 
Get_Form_Id(Form_Response_ID) { 
    return SELECT TOP 1 Form_ID FROM [Form_Responses] WHERE [Form_Response_ID] = Form_Response_ID 
} 
+1

Il est extrêmement difficile de comprendre ce que vous essayez de faire avec ce seul code SQL. S'il vous plaît partager quelques exemples de données et vos résultats souhaités. – JNevill

+0

@JNevill Mon code fonctionne - mon problème est exactement ce que vous avez décrit - personne ne peut comprendre ce que je viens d'écrire. Fondamentalement, il existe trois instructions SELECT imbriquées. Je veux un moyen de le décomposer en variables. Les fonctions me viennent à l'esprit, je suppose. Cela doit être dans une vue - je ne peux pas utiliser des vars. Je demande comment le rendre plus lisible. – VSO

+1

Vous avez WHERE [Form_Response_ID] = [Form_Response_ID] dans votre sous-requête, c'est comme 1 = 1, donc vous voulez sélectionner toute la ligne de [Form_Responses]? – scaisEdge

Répondre

1

Très probablement la requête que vous recherchez est comme ci-dessous

select f.Form_Title as Form_Name 
from 
Forms f JOIN Form_Responses fr 
on f.Form_ID=fr.Form_ID 
JOIN Submissions s 
on fr.Form_Response_ID=S.Form_Response_ID 
+0

Peut-être, peut-être que je suis juste trop fatigué. Mais de toute façon, j'ai besoin d'un moyen de ne pas avoir autant de code sur une seule ligne. Je vais faire la même manipulation complexe pour 15 autres domaines. – VSO