如何使用 select 语句作为值的 where 子句

How do you do a where clause with a select statement as a value

我正在尝试从下个月的记录中获取总金额。

SELECT TOP (1000) 
    [DEMAND_POINT_ID],
    [DPM_XREF_ID],
    [UTIL_TYPE],
    [ACCOUNT_ID],
    [REV_YR_MNTH],
    [TOTAL_AMOUNT],
    (SELECT CAST(LEFT((SELECT CONVERT(varchar, DATEADD(month, 1, LEFT(REV_YR_MNTH, 4) + '-' + RIGHT(REV_YR_MNTH, 2) + '-' + '01'), 112)), 6) AS int)) AS nextmonth,
    (SELECT de2.[TOTAL_AMOUNT]
     FROM [DEQEnergyUsage].[dbo].[DST_ENERGY_USAGE_AGGR] de2
     WHERE de2.ACCOUNT_ID = de.ACCOUNT_ID 
       AND de2.REV_YR_MNTH = (SELECT CAST(LEFT((SELECT CONVERT(varchar, DATEADD(month, 1, LEFT(REV_YR_MNTH, 4) + '-' + RIGHT(REV_YR_MNTH, 2) + '-' + '01'), 112)), 6) AS int))) AS nextamount
FROM 
    [DEQEnergyUsage].[dbo].[DST_ENERGY_USAGE_AGGR] de
WHERE
    ACCOUNT_ID =1 
ORDER BY 
    ACCOUNT_ID, de.REV_YR_MNTH

nextmonth 正确创建了下个月的 rev_yr_mnth 但是当我尝试在 where 子句中使用这个创建的值时它在 nextamount 字段中没有返回任何内容。

好像不承认创造的价值是真实的价值。我需要做什么才能让 where 子句识别值?

使用 CTE,您可以在 nextmonth.

上添加条件
With CTE As (
SELECT TOP (1000) 
    [DEMAND_POINT_ID],
    [DPM_XREF_ID],
    [UTIL_TYPE],
    [ACCOUNT_ID],
    [REV_YR_MNTH],
    [TOTAL_AMOUNT],
    (SELECT CAST(LEFT((SELECT CONVERT(varchar, DATEADD(month, 1, LEFT(REV_YR_MNTH, 4) + '-' + RIGHT(REV_YR_MNTH, 2) + '-' + '01'), 112)), 6) AS int)) AS nextmonth,
    (SELECT de2.[TOTAL_AMOUNT]
     FROM [DEQEnergyUsage].[dbo].[DST_ENERGY_USAGE_AGGR] de2
     WHERE de2.ACCOUNT_ID = de.ACCOUNT_ID 
       AND de2.REV_YR_MNTH = (SELECT CAST(LEFT((SELECT CONVERT(varchar, DATEADD(month, 1, LEFT(REV_YR_MNTH, 4) + '-' + RIGHT(REV_YR_MNTH, 2) + '-' + '01'), 112)), 6) AS int))) AS nextamount
FROM 
    [DEQEnergyUsage].[dbo].[DST_ENERGY_USAGE_AGGR] de
WHERE
    ACCOUNT_ID =1 
ORDER BY 
    ACCOUNT_ID, de.REV_YR_MNTH
)
select * from CTE
-- Where nextmonth condition