请求是2部分:
记录应该从报告中删除_ * 如果记录已过期AND
if * _ RecordStatus != 'Funded'
。
记录应保留在报告中
_ 如果 RecordStatus = 'Funded'
* ,则没有* PURCHASEDATE
,并且记录已过期(过去是** {{1} })。
我尝试用currentdate
做这个,但是这个请求似乎是布尔逻辑,因此不切实际。我试图调查CASE
,但我失去了如何做到这一点。我花了整整两天的时间试图让这个工作起来,我什么也没做到。那里有没有人帮我解决这个问题然后解释一下?
下面是一个简单的失败示例(是的,我完全理解这是由于条件而不是表达式而失败):
IF...THEN...ELSE
谢谢!
答案 0 :(得分:3)
这些要求似乎对我很怀疑,但这是我对它的看法(没有"条件逻辑"需要)以及为什么看起来如此可疑"如果我正在阅读它正确..
记录应保留在报告中如果RecordStatus ='资助',没有PURCHASEDATE,并且记录已过期(过去是从当前日期开始)。
RecordStatus = 'Funded'
AND PurchaseDate IS NULL
AND ExpiredDate < CURRENT_TIMESTAMP
如果记录已过期且RecordStatus!=&#39;资助&#39;
,记录应该从报告中删除
NOT (HasExpired AND RecordStatus <> 'Funded')
组合:
RecordStatus = 'Funded'
AND PurchaseDate IS NULL
AND ExpiredDate < CURRENT_TIMESTAMP
AND NOT (HasExpired AND RecordStatus <> 'Funded')
De Morgan的转型:
RecordStatus = 'Funded'
AND PurchaseDate IS NULL
AND ExpiredDate < CURRENT_TIMESTAMP
AND (NOT HasExpired OR RecordStatus = 'Funded')
分发后消除包含的条件。
RecordStatus = 'Funded'
AND PurchaseDate IS NULL
AND ExpiredDate < CURRENT_TIMESTAMP
AND NOT HasExpired
但是,假设HasExpired
与ExpiredDate < CURRENT_TIMESTAMP
RecordStatus = 'Funded'
AND PurchaseDate IS NULL
AND ExpiredDate < CURRENT_TIMESTAMP
AND NOT ExpiredDate < CURRENT_TIMESTAMP
当然,这绝不是真的,为什么我会怀疑。
答案 1 :(得分:2)
您目前的标准有点误导。
你说在一个案例中它应该从报告中删除,而在另一个案例中它应该继续,但你指的是不同的状态'。
我喜欢考虑我想在SQL查询中看到的内容。
所以我希望看到Funded状态,我希望看到PurchaseDate为null。
SELECT ...
FROM ...
WHERE (RecordStatus = 'Funded' AND purchaseDate IS NULL)
如果您还想查看RecordStatus!='Funded'的记录,但仅当记录是最新的时候才添加OR
WHERE (RecordStatus = 'Funded' AND purchaseDate IS NULL) OR
(RecordStatus != 'Funded' AND getDate() <= ExpirationDate)
答案 2 :(得分:0)
通常,您在WHERE中构建逻辑,而不是使用CASE或IF,这不是性能明智的
...
NOT (RecordStatus != 'Funded' AND getdate() > EXPIRATIONDATE) OR
(PURCHASEDATE IS NULL AND RecordStatus = 'Funded' AND getdate() > EXPIRATIONDATE)
您可以进一步优化它:
...
RecordStatus = 'Funded' OR getdate() <= EXPIRATIONDATE OR
PURCHASEDATE IS NULL