2010-06-21 8 views
1

J'ai cette requêteJe veux savoir si cette méthode de requête est possible?

SELECT  PaymentDetails_ID AS Pay_ID, Type, Description, Details, Due_Date, PaymentDetails_Cleared, Amount, Mode, 
          (SELECT  Bill_ID 
          FROM   Bill_Payment_Records 
          WHERE  (Payment_ID = Pay_ID)) AS Bill_No 
FROM   Payment_Details 
WHERE  (Mode = 1) AND (PaymentDetails_Cleared = 0) AND (Due_Date BETWEEN @Start_Date AND @End_Date) 

ici que je veux ajouter une variable qui peut être utilisée dans une requête à l'intérieur. Comme je veux Bill_ID qui peut être déterminé dans la requête. Comme je l'ai étudié, je ne pense pas que ce soit possible, mais est-il possible que je peux le faire.

+0

Cette disposition n'est pas exactement facile à lire. .. – MatBailie

Répondre

0

Je suppose que vous avez des problèmes avec le calcul de [Bill_No]. Je peux penser à trois problèmes possibles, le premier dont je suis sûr est le problème principal:
1. [Pay_ID] est en réalité [PaymentDetails_ID]. Vous ne pouvez pas utiliser l'alias dans la même instruction SELECT où vous affectez l'alias.
2. Vous ne spécifiez pas les noms de table dans la sous-requête corrélée.
3. Vous pouvez récupérer plus d'un enregistrement de la sous-requête corrélée.

Essayez ceci?

SELECT 
    PaymentDetails_ID AS Pay_ID, 
    Type, 
    Description, 
    Details, 
    Due_Date, 
    PaymentDetails_Cleared, 
    Amount, 
    Mode, 
    (
     SELECT 
     TOP 1 
     Bill_ID 
     FROM 
     Bill_Payment_Records 
     WHERE 
     [Bill_Payment_Records].Payment_ID = [Payment_Details].PaymentDetails_ID) 
    ) AS Bill_No 
FROM 
    Payment_Details 
WHERE 
    (Mode = 1) 
    AND (PaymentDetails_Cleared = 0) 
    AND (Due_Date BETWEEN @Start_Date AND @End_Date) 

(Seuls les noms « TOP 1 » et de table ont été ajoutés à la sous-requête en corrélation. « Pay_ID » a été changé en « PaymentDetails_ID ».)

1

Je ne sais pas à votre question, mais selon moi, vous pouvez utiliser la variable dans l'instruction select comme celui-ci a ajouté @billid dans la requête

SELECT  PaymentDetails_ID AS Pay_ID, Type, Description, Details, Due_Date, PaymentDetails_Cleared, Amount, Mode, 
    (SELECT  Bill_ID 
      FROM   Bill_Payment_Records 
      WHERE  (Payment_ID = @billid)) AS Bill_No 
     FROM   Payment_Details 
    WHERE  (Mode = 1) AND (PaymentDetails_Cleared = 0) AND (Due_Date BETWEEN @Start_Date AND @End_Date) 
+0

je sais que mais cette variable facturée doit être générée au cours de cette requête d'exécution – Mobin

+0

poster votre requête que je peux donner la solution si possible –

0

Cela est possible, mais pas bonne façon de le faire parce que c'est comme vous mettez la valeur fixe dans la requête sauf si vous utilisez la boucle ou le curseur pour exécuter la requête.

+0

Pouvez-vous me suggérer quelque chose à lire ou un lien peut être un exemple – Mobin

+0

Déclare @bill_ID as int Declare Cursor as select Requête pour votre utilisation dans la liste Variables que vous voulez dans C urss begin utilisez votre sous-requête et définissez votre variable dans le champ Sélectionnez @BillID = BillId de TableName où le critère User votre requête d'origine et placez @BillID dans this. Sélectionnez * à partir de Tablename où Billid = @ BillID end Curseur de dégagement – KuldipMCA

+0

Je n'ai pas pu effectuer cette opération. Peux-tu être plus précis. $ – Mobin

Questions connexes