SQL SERVER参考:
WITH
A AS(
SELECT '2025-01' AS COL1,'X' AS D1,'A0001' AS D2,'X' AS D3
UNION ALL
SELECT '2025-01' AS COL1,'B0001' AS D1,'A0001' AS D2,'X' AS D3
UNION ALL
SELECT '2025-01' AS COL1,'A0001' AS D1,'B0001' AS D2,'C0001' AS D3
),
AttendanceData AS (
SELECT
col1 AS month,
day_column,
employee_id
FROM A
UNPIVOT (
employee_id FOR day_column IN (d1, d2, d3)
) AS unpvt
WHERE employee_id IS NOT NULL
)
SELECT
month,
employee_id,
COUNT(*) AS attendance_days
FROM AttendanceData
GROUP BY month, employee_id
ORDER BY month, employee_id;