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

Sql 我想知道这种查询方法是否可行?,sql,Sql,我有这个疑问 SELECT PaymentDetails_ID AS Pay_ID, Type, Description, Details, Due_Date, PaymentDetails_Cleared, Amount, Mode, (SELECT Bill_ID FROM Bill_Payment_Records

我有这个疑问

    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)
在这里,我想添加一个可以在内部查询中使用的变量。 就像我想要账单一样,可以在查询中确定


正如我所研究的,我认为这是不可能的,但我有什么办法可以做到这一点。

不确定您的问题,但根据我的说法,您可以在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)

不确定您的问题,但根据我的说法,您可以在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)

这是可能的,但不是正确的方法,因为这就像在查询中输入固定值一样
除非您使用循环或游标来运行查询。

这是可能的,但不是正确的方法,因为这就像您在查询中放入固定值一样
除非您使用循环或游标运行查询。

我猜您在计算[Bill\u No]时遇到了问题。我可以想到三个可能的问题,第一个我很确定是主要问题:
1.[Pay_ID]实际上是[PaymentDetails_ID]。不能在分配别名的同一SELECT语句中使用别名。
2.您没有在相关子查询中指定表名。
3.您可以从相关子查询返回多条记录

试试这个

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)

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

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

试试这个

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)

(仅将“前1名”和表名添加到相关子查询。“Pay_ID”更改为“PaymentDetails_ID”。)

我知道,但该账单变量将在本次查询执行期间生成发布您的查询,如果可能,我可以给出解决方案我知道,但该账单变量将在本次查询执行期间生成发布您的查询,如果可能,我可以给出解决方案您可以建议我阅读一些内容,或者任何链接可能是任何示例Declare吗@bill_ID as int将游标声明为select Query供您在游标中使用的变量列表开始使用子查询,并在select@BillID=BillID from TableName中设置变量,其中条件用户使用原始查询并将@BillID放入其中。从Tablename中选择*,其中Billid=@Billid end Deallocate Cursori无法执行该操作。你能说得更具体些吗$你能给我一些阅读的建议吗?或者任何链接都可以是任何示例Declare@bill\u ID as int Declare Cursor as select Query for your use in Variables list in Cursor开始使用你的子查询并在select@BillID=BillID from TableName中设置你的变量,其中的条件是使用你的原始查询并将@BillID放入其中。从Tablename中选择*,其中Billid=@Billid end Deallocate Cursori无法执行该操作。你能说得更具体些吗$那个版面不太容易阅读…那个版面不太容易阅读。。。