Sql 使用Case语句转换查询
我尝试使用CTE,但结果不同,我认为查询有一些问题。前面的查询很简单,但我想转换成CTE表Sql 使用Case语句转换查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,我尝试使用CTE,但结果不同,我认为查询有一些问题。前面的查询很简单,但我想转换成CTE表 select sum(DATEDIFF("D",M.ActiveStart,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0))) as Duration_Days , m.HomeBranch, m.LocationName from AX.Memberships M where m.ActiveStart < DATEADD(MONT
select sum(DATEDIFF("D",M.ActiveStart,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0))) as Duration_Days
, m.HomeBranch, m.LocationName
from AX.Memberships M
where m.ActiveStart < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
and (M.ActiveEnd > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) or M.ActiveEnd is null)
group by m.HomeBranch, m.LocationName
问题是:
with CTE_ABC AS (
select
SUM(CASE
When m.ActiveStart < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) and (M.ActiveEnd >
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,-1) or M.ActiveEnd is null)
then DATEDIFF(D,M.ActiveStart,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)) else 0 end) as Total_Duration
, M.HomeBranch
, M.LocationName
from AX.Memberships M
group by M.HomeBranch, M.LocationName
)
Select Total_Duration
From CTE_ABC
不同于
select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,-1) --> this is end of the month
因此,您的查询将产生不同的结果
您的cte应该如下所示,以便在原始查询中得到相同的结果
select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) --> this is start of the month
问题是:
with CTE_ABC AS (
select
SUM(CASE
When m.ActiveStart < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) and (M.ActiveEnd >
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,-1) or M.ActiveEnd is null)
then DATEDIFF(D,M.ActiveStart,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)) else 0 end) as Total_Duration
, M.HomeBranch
, M.LocationName
from AX.Memberships M
group by M.HomeBranch, M.LocationName
)
Select Total_Duration
From CTE_ABC
不同于
select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,-1) --> this is end of the month
因此,您的查询将产生不同的结果
您的cte应该如下所示,以便在原始查询中得到相同的结果
select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) --> this is start of the month
旁白:尽管微软感到困惑,但它是一个case表达式,而不是语句。旁白:尽管微软感到困惑,它是一个case表达式,而不是语句。