微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我还能如何更有效地编写此嵌套查询?

如何解决我还能如何更有效地编写此嵌套查询?

是否有更高效的编写此嵌套查询方法查询已大大简化,但基本上字段需要从基表一直构建到所需结果)。

@YearofBookingminus1 是一个声明和计算的变量。这是通过的,对于手头的问题不一定是必需的。我没有添加这个代码

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,所以这应该可以工作,但您应该更新以使问题更清楚

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。