You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQL Server与SQLite中实现UNPIVOT并生成TimecardDate列的问询

在SQL Server和SQLite中实现带日期计算的UNPIVOT转换

SQL Server 解决方案

SQL Server原生支持UNPIVOT,只需在现有查询基础上添加TimecardDate列,通过CASE语句匹配星期名称确定日期偏移量,再用DATEADD函数计算目标日期:

SELECT 
    DayOftheWeek,
    ActualHrs,
    WeekStartsOn,
    DATEADD(day, 
        CASE DayOftheWeek
            WHEN 'Monday' THEN 1
            WHEN 'Tuesday' THEN 2
            WHEN 'Wednesday' THEN 3
            WHEN 'Thursday' THEN 4
            WHEN 'Friday' THEN 5
        END, 
        WeekStartsOn) AS TimecardDate
FROM (
    SELECT Monday, Tuesday, Wednesday, Thursday, Friday, WeekStartsOn
    FROM itplanning.enriched.timecard_enriched_current
) AS cp 
UNPIVOT ( 
    ActualHrs FOR DayOftheWeek IN (Monday, Tuesday, Wednesday, Thursday, Friday) 
) AS PivotTable
WHERE ActualHrs <> 0

逻辑说明:用CASE映射星期与天数偏移的对应关系,通过DATEADD将偏移量叠加到WeekStartsOn上,生成符合要求的TimecardDate。

SQLite 解决方案

SQLite无内置UNPIVOT函数,需用UNION ALL模拟列转行操作,同时在每个分支中直接计算对应日期:

SELECT 
    'Monday' AS DayOftheWeek,
    Monday AS ActualHrs,
    WeekStartsOn,
    DATE(WeekStartsOn, '+1 day') AS TimecardDate
FROM itplanning.enriched.timecard_enriched_current
WHERE Monday <> 0

UNION ALL

SELECT 
    'Tuesday' AS DayOftheWeek,
    Tuesday AS ActualHrs,
    WeekStartsOn,
    DATE(WeekStartsOn, '+2 day') AS TimecardDate
FROM itplanning.enriched.timecard_enriched_current
WHERE Tuesday <> 0

UNION ALL

SELECT 
    'Wednesday' AS DayOftheWeek,
    Wednesday AS ActualHrs,
    WeekStartsOn,
    DATE(WeekStartsOn, '+3 day') AS TimecardDate
FROM itplanning.enriched.timecard_enriched_current
WHERE Wednesday <> 0

UNION ALL

SELECT 
    'Thursday' AS DayOftheWeek,
    Thursday AS ActualHrs,
    WeekStartsOn,
    DATE(WeekStartsOn, '+4 day') AS TimecardDate
FROM itplanning.enriched.timecard_enriched_current
WHERE Thursday <> 0

UNION ALL

SELECT 
    'Friday' AS DayOftheWeek,
    Friday AS ActualHrs,
    WeekStartsOn,
    DATE(WeekStartsOn, '+5 day') AS TimecardDate
FROM itplanning.enriched.timecard_enriched_current
WHERE Friday <> 0

逻辑说明:SQLite的DATE函数支持直接通过字符串格式的偏移参数(如'+1 day')计算日期,每个UNION ALL分支对应原表的一列,同步生成星期名称和目标日期。

内容的提问来源于stack exchange,提问作者Sourav Guha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:02:38