新手程序员在这里,所以任何建议都是非常感谢。
编辑:我有一个包含数千个正在进行的项目的表格。每个项目至少有10个不同的日期/里程碑(记录为日期,因此是date1、date2等等)。我需要创建一个计算字段,根据该项目的最大日期(基于所有日期列),我必须在项目中的特定阶段设置它(请参阅阶段列--这是我试图用代码生成的计算字段)。细目如下:
并不是特定阶段的所有日期都可用。例如,在项目#1中,填充的是date1,而不是date2或date3,因此这表示该项目仍在Stage1中。如果还填充了date2或date3,则项目仍为Stage1,因为date4、date5、date6、date7、date8、date9、date10都为空。
因此,我在select语句中编写case语句,但它变得有点复杂。以下是我为阶段2起草的内容:
SELECT *
FROM datatable
CASE WHEN date5 >= date4
AND date5>date3
AND date5>date2
AND date5>date1
AND date6=NULL
AND date7=NULL
AND date8=NULL
AND date9=NULL
AND date10=NULL
THEN 'Stage2'
这只是第二阶段,我还没有写出其他的阶段。有没有更简单的方法可以做到这一点?
谢谢!
发布于 2020-04-15 20:52:14
您似乎希望根据行中设置的最后一个日期列来设置阶段。当CASE
表达式中的第一个匹配项获胜时,这将是:
SELECT t.*,
CASE
WHEN date10 IS NOT NULL THEN 'Stage5'
WHEN date9 IS NOT NULL THEN 'Stage4'
WHEN date8 IS NOT NULL THEN 'Stage4'
WHEN date7 IS NOT NULL THEN 'Stage3'
WHEN date6 IS NOT NULL THEN 'Stage3'
WHEN date5 IS NOT NULL THEN 'Stage2'
WHEN date4 IS NOT NULL THEN 'Stage2'
WHEN date3 IS NOT NULL THEN 'Stage1'
WHEN date2 IS NOT NULL THEN 'Stage1'
WHEN date1 IS NOT NULL THEN 'Stage1'
ELSE 'Stage0'
END AS stage
FROM datatable t
ORDER BY project#;
https://stackoverflow.com/questions/61237044
复制相似问题