具有多个最大条件的SQL Case语句



我目前正在处理两个条件,我想合并为一个,但遇到了一些麻烦。我有一个包含数量和日期的数据集。我以case语句的形式创建了一个日期标志,用于标记它是否是一周的最后一天,并给它一个"Y"或";N"。我需要的最终结果是一周的最后一个日期。我的最终结果/目标是D栏

这是我当前的源代码:

select
pos.quantity_on_hand,
d.cal_date,
case
when date_key in( Select max(date_key) from edw.D_dates group by fiscal_year_nbr, fiscal_week_nbr)
then 'Y'
else 'N'
end Week_end_flag
from
edw.f_pos_daily pos,
edw.d_dates d,
where
pos.pos_date_key = d.date_key

然后在PowerBI Desktop中创建另一个自定义列,看起来像这样:这是我在列计算中使用的:

Last Inventory Date = RETURN(CALCULATE(MAXX(Inventory, Inventory[Cal_date]), filter ('D_Dates', 'D_Dates'[Week_end_flag]="Y")).

我试着把它们组合成一个,像这样,但是失败了:

case
when date_key in( Select max(date_key) from edw.D_dates group by fiscal_year_nbr, fiscal_week_nbr)
then MAX (cal_date) from edw.D_Dates where cal_date< current_date AS 'yyyy-mm-dd'
else 'N'
end Week_End_flag

在then子句中使用select命令

改变这一行:

then MAX (cal_date) from edw.D_Dates where cal_date< current_date AS 'yyyy-mm-dd'

:

then (SELECT MAX (cal_date) from edw.D_Dates where cal_date< current_date AS 'yyyy-mm-dd')

完整代码:

select
pos.quantity_on_hand,
d.cal_date,
case
when date_key in( Select max(date_key) from edw.D_dates group by fiscal_year_nbr, fiscal_week_nbr)
then (SELECT MAX (cal_date) from edw.D_Dates where cal_date< current_date AS 'yyyy-mm-dd')
else 'N'
end Week_end_flag
from
edw.f_pos_daily pos,
edw.d_dates d,
where
pos.pos_date_key = d.date_key

最新更新