【发布时间】:2018-12-06 01:34:00
【问题描述】:
我正在将 microsoft access 查询转换为 postgresql 视图。该查询具有明显的组件,我已经找到了合理的答案。但是,我仍然坚持得到最终结果:
SELECT All_Claim_Data.Sec_ID,
Sum(IIf([Type]="LODE",IIf([Status]="Active",1,0),0)) AS LD_Actv,
Sum(IIf([Type]="LODE",IIf([Loc_Date]>#8/31/2017#,IIf([Loc_Date]<#9/1/2018#,1,0),0),0)) AS LD_stkd_17_18,
Sum(IIf([Type]="LODE",IIf([Loc_Date]>#8/31/2016#,IIf([Loc_Date]<#9/1/2017#,1,0),0),0)) AS LD_stkd_16_17,
Sum(IIf([Type]="LODE",IIf([Loc_Date]<#1/1/1910#,IIf(IsNull([Clsd_Date]),1,(IIf([Clsd_Date]>#1/1/1900#,1,0))),0),0)) AS Actv_1900s,
Sum(IIf([Type]="LODE",IIf([Loc_Date]<#1/1/1920#,IIf(IsNull([Clsd_Date]),1,(IIf([Clsd_Date]>#1/1/1910#,1,0))),0),0)) AS Actv_1910s,
FROM All_Claim_Data.Sec_ID,
GROUP BY All_Claim_Data.Sec_ID,
HAVING (((Sum(IIf([casetype_txt]="LODE",1,0)))>0));
意识到我需要使用 CASE SUM WHEN,这是我到目前为止所制定的:
CREATE OR REPLACE VIEW hgeditor.vw_test AS
SELECT All_Claim_Data.Sec_ID,
SUM (CASE WHEN(Type='LODE' AND WHEN(Status='Active',1,0),0)) AS LD_Actv,
SUM (CASE WHEN(Type='LODE' AND WHEN(Loc_Date>'8/31/2017' AND Loc_Date<'9/1/2018',1,0),0),0)) AS LD_stkd_17_18,
SUM (CASE WHEN(Type='LODE' AND WHEN(Loc_Date<'1/1/1910' AND (IsNull(Clsd_Date),1,(WHEN([Clsd_Date]>'1/1/1900',1,0))),0),0)) AS Actv_1900s
FROM All_Claim_Data.Sec_ID,
GROUP BY All_Claim_Data.Sec_ID,
HAVING (((SUM(IIf(Type='LODE',1,0)))>0));
目标是统计 Sec_ID 具有以下内容的实例数:
- 有(类型 = LODE 和状态 = 活动)= SUM 整数
- 具有(类型 = LODE 和 Loc_Date 介于 2017 年 8 月 31 日和 2018 年 9 月 1 日之间)= SUM 整数
我的主要问题是获取一个 SUM 整数以填充到新列中
【问题讨论】:
-
when不是一个函数,一个 case 表达式是这样形成的:case when ... then when ... then ... else ... end你似乎在使用IF()时使用 -
@Used_By_Already 我用这个例子作为参考:link
-
是的,那个引用没问题,但这不是
CASE WHEN(Type='LODE' AND WHEN(Status='Active',1,0),0)) -
所以,基本上我不知道我的“THEN”语句会是什么样子.....
-
在下面阅读我的答案。您实际上只是在原始中返回 1 或 0,所以
THEN 1 ELSE 0
标签: sql postgresql ms-access sum case