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