我正在尝试使用日期案例在 SSIS 中向后运行 1 个月的查询,即 如果本月是 1 月,则必须显示去年 12 月的数据,并且 如果月份是 2 月至 12 月,则必须显示上个月的数据。 运行查询后,它显示关于所附图像的语法不正确的错误近一个月。有人可以为我提供帮助吗?谢谢你的优势。
Select distinct
a.POLICY_NO,c.CLAIM_NO,c.ENTRY_DATE,c.LOSS_DATE,c.LOSS_TIME,c.LOSS_DESC_CODE,c.LOSS_DESCRIPTION,c.CLAIM_STATUS,c.CLAIM_TYPE,c.PERSON_ENTRY_CODE,
(select p.person_full_name from center_setup.dbo.setup_person_name_master p where p.person_short_name = c.person_entry_code) as Person_Name,
c.loss_place_name
from
(select cm.policy_no,COUNT(cm1.claim_no) as Count_,cm.LOSS_DATE,
case
when
month(cm.ENTRY_DATE) = '01' then DATEADD(year, -1, cm.ENTRY_DATE)
month(cm.ENTRY_DATE) >= '02' AND year(cm.ENTRY_DATE)=YEAR(GETDATE()) then DATEADD(month, -1, cm.ENTRY_DATE)
end
,cm.LOSS_DESC_CODE
from cosl_master cm inner join cosl_master cm1 on cm.POLICY_NO = cm1.POLICY_NO and cm.loss_date =cm1.loss_date and cm.loss_desc_code = cm1.LOSS_DESC_CODE and cm1.CLAIM_STATUS <> 'I' --and cm.LOSS_TIME = cm1.LOSS_TIME
where cm.claim_status in ('O','R') and cm.CLAIM_STATUS <> 'I'
group by cm.claim_no,cm.policy_no,cm.LOSS_DATE,cm.ENTRY_DATE ,cm.LOSS_DESC_CODE
having COUNT(cm1.claim_no) > 1) A left join COSL_MASTER c on A.POLICY_NO = c.POLICY_NO and c.CLAIM_STATUS <> 'I' and a.LOSS_DATE = c.LOSS_DATE and c.LOSS_DESC_CODE = a.LOSS_DESC_CODE
order by a.policy_no asc
使用 CASE 有两种不同的方法,因此您只需要了解正确的语法,具体取决于您将如何进行 CASE 比较。 (在您的错误的特定情况下,您的语法不太正确)
任一(一个值的简单比较):
SELECT CASE month(cm.EntryDate)
WHEN 1 THEN 'something'
WHEN 2 THEN 'something else'
WHEN 3 THEN 'another different thing'
END
或(不同比较条件)
SELECT CASE
WHEN month(cm.EntryDate) = 1 THEN 'this action'
WHEN month(cm.EntryDate) >= 2 AND year(cm.EntryDate) = year(getdate()) THEN 'a different action'
END
您错过了第二个测试用例的 WHEN 关键字。
case
when month(cm.ENTRY_DATE) = '01' then DATEADD(year, -1, cm.ENTRY_DATE)
when month(cm.ENTRY_DATE) >= '02' AND year(cm.ENTRY_DATE)=YEAR(GETDATE()) then DATEADD(month, -1, cm.ENTRY_DATE)
end