sql视图语句之项目完成进度 case when

需求

Microsoft SQL Server表名为uf_projectinfo,字段有id、项目编码proCode、计划结束日期planenddate、实际结束日期trueenddate。

创建了一个视图,根据项目的计划结束日期和实际结束日期的情况,统计了总项目数量、按期完成数量和超期完成数量。

使用了CASE语句进行逻辑判断。根据要求,对每个项目的计划结束日期和实际结束日期进行比较,并根据不同情况进行分类统计:

  • 如果计划日期大于今天,并且实际日期为空,则不算在计数逻辑之中(不做统计)。
  • 如果计划日期大于今天,并且实际日期小于等于计划日期,则算 --------  按期完成]
  • 如果计划日期小于等于今天,并且实际日期小于等于计划日期,则算-------- 正常完成。
  • 如果计划日期小于等于今天,并且实际日期大于计划日期,则算-------- 超期完成。

通过对不同情况进行分类统计,最终得到了总项目数量、按期完成数量和超期完成数量的结果。

结果集1

结果集是有效项目--------------总数量、已完成数量、未完成数量

SELECT  
    COUNT(*) AS total_projects,
    SUM(CASE 
            WHEN planenddate > GETDATE() AND trueenddate IS NULL THEN 0
            WHEN planenddate > GETDATE() AND trueenddate <= planenddate THEN 1
            WHEN planenddate <= GETDATE() AND trueenddate <= planenddate THEN 1
            WHEN planenddate <= GETDATE() AND trueenddate > planenddate THEN 1
            ELSE 0
        END) AS on_time_projects,
    SUM(CASE 
            WHEN planenddate > GETDATE() AND trueenddate IS NULL THEN 0
            WHEN planenddate > GETDATE() AND trueenddate > planenddate THEN 1
            WHEN planenddate <= GETDATE() AND trueenddate > planenddate THEN 1
            ELSE 0
        END) AS late_projects
FROM uf_projectinfo;
 

结果集2

结果集会显示每一个项目的执行状态

SELECT
    id,
    proCode,
    planenddate,
    trueenddate,
    CASE
        WHEN planenddate > GETDATE() AND trueenddate IS NULL THEN '未完成'
        WHEN planenddate > GETDATE() AND trueenddate <= planenddate THEN '按期完成'
        WHEN planenddate <= GETDATE() AND trueenddate <= planenddate THEN '正常完成'
        WHEN planenddate <= GETDATE() AND trueenddate > planenddate THEN '超期完成'
    END AS completion_status
FROM uf_projectinfo;

结果集3

结果集只会显示有效的项目完成进度

SELECT
    id,
    proCode,
    planenddate,
    trueenddate,
    CASE
        WHEN planenddate > GETDATE() AND trueenddate IS NULL THEN '未完成'
        WHEN planenddate > GETDATE() AND trueenddate <= planenddate THEN '按期完成'
        WHEN planenddate <= GETDATE() AND trueenddate <= planenddate THEN '正常完成'
        WHEN planenddate <= GETDATE() AND trueenddate > planenddate THEN '超期完成'
    END AS completion_status
FROM uf_projectinfo
WHERE CASE
        WHEN planenddate > GETDATE() AND trueenddate IS NULL THEN '未完成'
        WHEN planenddate > GETDATE() AND trueenddate <= planenddate THEN '按期完成'
        WHEN planenddate <= GETDATE() AND trueenddate <= planenddate THEN '正常完成'
        WHEN planenddate <= GETDATE() AND trueenddate > planenddate THEN '超期完成'
    END IS NOT NULL;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值