Sql server 如何修改SQL查询以考虑此特定筛选条件?
我正在使用SQL Query 2014,我的数据库上运行了以下T-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',
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