我有一张有员工出席的桌子。该表记录了员工的行动(现在,缺席,迟到等)。仅在用户在场时使用该表。休息日(周末)没有入场券。我想显示所有月份,包括他缺席的日子和周末。 例如:如果一个人来20天,它应该显示所有30天,包括他在场的日子。我已经尝试过GetDate,但这适用于个人约会的出席。 谢谢。
答案 0 :(得分:1)
创建一个Calendar
表。如果该日期是工作日,周末,银行假日等,这应该包含您需要的每个日期,并标明该日期
然后它只是一个LEFT JOIN。
SELECT
*
FROM
Calendar
LEFT JOIN
yourTable
ON yourTable.date = Calendar.date
AND yourTable.user = 12345
WHERE
Calendar.date >= '2014-02-01'
AND Calendar.date < '2014-03-01'
对于多个用户,请先将calendar
表加入user
表。
SELECT
*
FROM
Calendar
CROSS JOIN
User
LEFT JOIN
yourTable
ON yourTable.date = Calendar.date
AND yourTable.user = User.id
WHERE
Calendar.date >= '2014-02-01'
AND Calendar.date < '2014-03-01'
AND User.id IN (1, 2, 3, 4)
此模式主要将日期视为维度(日历表),您可以将其与其他维度表结合使用,以便为数据创建模板。然后将LEFT JOIN
您的事实表格放到您的维度模板上。