我不是交易程序员,但我知道一些SQL。我只需要另外一些关注我的代码,因为我不确定为什么会收到此错误。
#boxLeft{
position: relative;
}
img{
position: absolute;
}
答案 0 :(得分:3)
您正在尝试将ci.ci_create_date
日期值与您的案例陈述产生的字符串进行比较,即1月,2月,3月或null。因此,您可以有效地进行比较:
ci.ci_create_date = to_date('January')
除非您的NLS_DATE_FORMAT是'月'并且您的语言是英语,将获得ORA-01858。您可以将其左侧转换为月份名称,但在任何格式模型中都没有年份,其中包含任何年份1月份的数据;如果可以避免,那么从表中转换数据的性能会更好。
它并不完全清楚你要尝试做什么,但由于子查询具有contact_interaction
的独立视图且没有相关性,因此它可能无法做任何事情。无论如何都要尝试。
如果您正在尝试计算今年前三个月的数值,那么您可以这样做:
select count(1) AH
from regmdr.contact_interaction ci
join regmdr.source_data sd on ci.sd_id = sd.sd_id
join regmdr.account_contact ac on ci.acct_cont_id = ac.acct_cont_id
join regmdr.account acc on ac.acc_id = acc.acc_id
where sd.sd_user_type in ('1','2')
and sd.sd_origin_reference = 'www.alliancehealth.com'
and ci.ci_create_date >= date '2016-01-01'
and ci.ci_create_date < date '2016-04-01'
哪个会给你一个号码。如果您希望按月将group by
放在错误的位置,则可以添加
...
group by trunc(ci.ci_create_date, 'MM')
虽然你在选择列表中确实也需要它,因为结果集没有任何意义 - 所以你知道每个计数属于哪个月。
根据使用月份名称,您可能想要选择列表中的那些:
select to_char(trunc(ci.ci_created_date, 'MM'), 'Month') as month,
count(1) as AH
from regmdr.contact_interaction ci
...
group by trunc(ci.ci_create_date, 'MM')
......但我现在推测的更多。另请注意,月份名称对您的NLS设置很敏感,尤其是NLS_DATE_LANGUAGE。你可以强制他们总是使用英语via the optional third argument to to_char()
,例如
select to_char(trunc(ci.ci_created_date, 'MM'), 'Month', 'NLS_DATE_LANGUAGE=ENGLISH')
...
答案 1 :(得分:0)
为什么不选择:
select to_char(ci.ci_create_date, 'YYYY-MM') monthyear,
count(1) AH
from regmdr.contact_interaction ci
join regmdr.source_data sd on ci.sd_id = sd.sd_id
join regmdr.account_contact ac on ci.acct_cont_id = ac.acct_cont_id
join regmdr.account acc on ac.acc_id = acc.acc_id
where sd.sd_user_type in ('1','2')
and sd.sd_origin_reference = 'www.alliancehealth.com'
and to_char(ci.ci_create_date, 'MON' in ('JAN', 'FEB', 'MAR')
group by to_char(ci.ci_create_date, 'yyyy-mm';
如果您只对计数感兴趣(没有上下文),请将其包装在外部的select语句中:
select AH
from (select to_char(ci.ci_create_date, 'YYYY-MM') monthyear,
count(1) AH
from regmdr.contact_interaction ci
join regmdr.source_data sd on ci.sd_id = sd.sd_id
join regmdr.account_contact ac on ci.acct_cont_id = ac.acct_cont_id
join regmdr.account acc on ac.acc_id = acc.acc_id
where sd.sd_user_type in ('1','2')
and sd.sd_origin_reference = 'www.alliancehealth.com'
and to_char(ci.ci_create_date, 'MON') in ('JAN', 'FEB', 'MAR')
group by to_char(ci.ci_create_date, 'yyyy-mm'
);