Sql 如何才能更有效地编写此嵌套查询?

Sql 如何才能更有效地编写此嵌套查询?,sql,subquery,nested-query,Sql,Subquery,Nested Query,有没有更有效的方法来编写这个嵌套查询查询已经大大简化了,但实际上字段需要从基表一直构建到所需的结果 @YearOfBookingMins1是一个声明和计算的变量。这是通过的,而不是手头的问题所必需的。我没有在中添加此代码 SELECT fct.ContractNo, Paced_revenue = CASE WHEN fct.ContractStatus = 'Booked'

有没有更有效的方法来编写这个嵌套查询查询已经大大简化了,但实际上字段需要从基表一直构建到所需的结果

@YearOfBookingMins1是一个声明和计算的变量。这是通过的,而不是手头的问题所必需的。我没有在中添加此代码

SELECT fct.ContractNo,
       Paced_revenue = CASE
                            WHEN fct.ContractStatus = 'Booked'
                             AND CYpacing = 'Y' THEN 1
                            ELSE 0 END
  FROM (   SELECT base_fct.ContractNo,
                  CASE
                       WHEN base_fct.YearofBooking <= @YearofBookingminus1 THEN 'Y'
                       ELSE 'N' END AS CYpacing
             FROM (   SELECT A.DIM_CONTRACT_ID,
                             B.YearofBooking
                        FROM SchemaA.Contract A
                        JOIN SchemaB.dim_date B
                          ON SchemaB.ID BETWEEN SchemaA.StartDate AND SchemaA.EndDate) AS base_fct ) AS fct;

这看起来像是with语句的一个简单示例

With base_fct as
(
  SELECT A.DIM_CONTRACT_ID, B.YearofBooking
  FROM SchemaA.Contract A
  JOIN SchemaB.dim_date B
  ON B.ID BETWEEN A.StartDate AND A.EndDate
),fct as 
(
    SELECT ContractNo
    ,CASE WHEN YearofBooking <= @YearofBookingminus1 THEN 'Y'
    ELSE 'N' END AS CYpacing
    FROM base_fct
)
select ContractNo,
,CASE WHEN ContractStatus = 'Booked' AND CYpacing = 'Y' THEN 1 ELSE 0 END as Paced_revenue
from fct

根据语法,您可能使用postgresql或mssql,因此这应该可以使用,但您应该更新以使问题更清楚

使用您正在使用的数据库标记您的问题。解释查询应该做什么-或者至少提供示例数据和所需结果。交叉应用值。。。如果您的DBMS支持它,可能会非常有用。但是关于字段是如何建立和计算的还不清楚,需要进一步的信息。例如,您提供的示例根本不需要嵌套查询。您可以直接从第一个查询(在其中连接两个表)开始计算您的进度收入。但是,如果在实际查询中不可能,请从使用临时表或CTE开始,以提高可读性。