Sql server 如何修改SQL查询以考虑此特定筛选条件?

Sql server 如何修改SQL查询以考虑此特定筛选条件?,sql-server,filter,where,Sql Server,Filter,Where,我正在使用SQL Query 2014,我的数据库上运行了以下T-SQL查询: use My Database SELECT * FROM ( SELECT a.ReservationStayID, c.PMSConfirmationNumber, a.StayDate, DATEPART(MONTH,a.StayDate) AS 'Month', DATEPART(YEAR,a.StayDate) AS 'Year',

我正在使用SQL Query 2014,我的数据库上运行了以下T-SQL查询:

use My Database

SELECT * FROM 
(
SELECT a.ReservationStayID,
       c.PMSConfirmationNumber,
       a.StayDate,
       DATEPART(MONTH,a.StayDate) AS 'Month',
       DATEPART(YEAR,a.StayDate) AS 'Year',
       c.[MTH], 
       a.PackagePlanCode,
       c.[Market Segment Code],
       c.[CurrencyCode],
       a.RateAmount,
       SUM(a.RateAmount) OVER(PARTITION BY a.ReservationStayID) AS 'CUM_Rate',
       d.[Exchange Rate],
       ((a.RateAmount * d.[Exchange Rate])/1.15) AS 'PR',
       c.[PropertyCode],
       C.[Room Nights],
       c.[Tour Operator],
       c.[Group Booking ID],
       c.[Source of Business],
       c.[Booking Origin (1)], 
       c.[Market FINAL],
       c.[CreatedOn],
       c.[CreatedOn_RSD]

FROM ReservationStayDate a

INNER JOIN 

(SELECT *

FROM [RESERVATIONLIST]) c ON c.[ReservationStayID] = a.ReservationStayID and c.[MTH] = datename(m,StayDate) + ' ' + cast(datepart(yyyy,StayDate) as varchar)

INNER JOIN 

(SELECT *

FROM [PKGREVENUE]) d ON d.[ReservationStayID] = a.ReservationStayID AND d.[StayDate] = a.StayDate

WHERE c.[Status] <> 'CANCELED'
) q

WHERE q.CUM_Rate <> 0 

ORDER BY q.ReservationStayID, q.StayDate
如何添加此特定条件?

以下是ReservationStayIDs 152、167、658、900未出现在结果中的原因:

RESERVATIONLIST上没有行,状态为“已取消” PKGREVENUE上没有匹配的行 要解决此问题,可能需要将内部联接转换为左联接。此外,您可能希望在SUM OVER子句中使用大小写表达式。在WHERE子句中,不应使用And,而应使用OR


注意:我将一些联接更改为直接使用表,而不是使用子查询并选择*FROM。

它很模糊,但可能在152、167、658、900 CUM_Rate中的q.CUM_Rate 0或q.ReservationStayId听起来很脏。@FelixPamittan lol,它意味着累积速率@Mihai正是我需要的!目前,我的输出给出了87621条记录,不包括CUM_Rate=0的所有ReservationStayID。我想为这些特定的ReservationStayID设置一个例外,因此,我最终应该有87625条记录。你的代码就是这么做的!谢谢
WHERE (q.CUM_Rate <> 0 AND q.ReservationStayId IN (152, 167, 658, 900))
SELECT * FROM (
    SELECT 
        --...,
        SUM(CASE 
                WHEN c.[Status] <> 'CANCELLED' THEN a.RateAmount
                ELSE 0
            END
            ) OVER(PARTITION BY a.ReservationStayID) AS 'CUM_Rate',
        --...
    FROM ReservationStayDate a
    LEFT  JOIN RESERVATIONLIST c    
        ON c.[ReservationStayID] = a.ReservationStayID 
        AND c.[MTH] = DATENAME(M, StayDate) + ' ' + CAST(DATEPART(YYYY,StayDate) AS VARCHAR)
        AND c.[Status] <> 'CANCELED'
    LEFT JOIN PKGREVENUEd 
        ON d.[ReservationStayID] = a.ReservationStayID
        AND d.[StayDate] = a.StayDate   
) q
WHERE 
    q.CUM_Rate <> 0
    OR q.ReservationStayId IN (152, 167, 658, 900)
ORDER BY q.ReservationStayID, q.StayDate