我想知道这种查询方法是否可行?

时间:2010-06-21 11:55:24

标签: sql

我有这个查询

    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)

在这里我想添加一个可以在内部查询中使用的变量。 就像我想要Bill_ID一样,可以在查询中确定。

正如我研究的那样,我觉得它不可能,但我有什么方法可以做到这一点。

3 个答案:

答案 0 :(得分:1)

不确定你的问题,但根据我的说法你可以使用变量里面的select语句,比如在查询中添加@billid

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)

答案 1 :(得分:0)

这是可能的,但不是正确的方法,因为它就像你在查询中放置固定值 除非你使用循环或Cursor来运行Query。

答案 2 :(得分:0)

我猜你在计算[Bill_No]时遇到了麻烦。我可以想到三个可能的问题,第一个我很确定是主要问题:
1. [Pay_ID]实际上是[PaymentDetails_ID]。您不能在分配别名的同一SELECT语句中使用别名 2.您不在相关子查询中指定表名 3.您可能会从相关的子查询中获得超过1条记录。

试试这个?

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)

(只有“TOP 1”和表名被添加到相关的子查询中。“Pay_ID”已更改为“PaymentDetails_ID”。)

相关问题