【问题标题】:show rows with no data in access显示访问中没有数据的行
【发布时间】:2016-12-14 05:49:12
【问题描述】:

我有以下疑问:

SELECT PersonTotalHours.MA, PersonTotalHours.Year, PersonTotalHours.CalendarWeek,
PersonTotalHours.Hours, Person.Name, Person.Lastname 
FROM PersonTotalHours
INNER JOIN Person
ON PersonTotalHours.MA = Person.MA;

结果如下表:

  MA       Year    CalendarWeek    Hours    Name    Lastname
  aA       2000         5           53      aa        AA
  aA       2000         44          175     aa        AA
  ...      ...         ...          ...
  aA       2001         4           226     aa        AA
  aA       2001         12          87      aa        AA
  ...      ...         ...          ...
  bB       2000         1           189     bb        BB
  bB       2000         35          65      bb        BB
  ...      ...         ...          ...

如您所见,某些日历周没有数据。有什么方法可以让我在所有日历周(1 到 53 周)都有一行,而对于现在不存在的那些周,我可以使用 hours=0?

编辑 我已经通过将缺失的行添加到表中来临时解决这个问题。使用报表打开时调用的函数。仍在寻找一个不愚蠢的解决方案。

【问题讨论】:

  • @Snickbrack 我已经编辑了标签。
  • 你想用这个查询来完成什么?
  • @Snickbrack 在访问报告中显示数据。
  • 为什么问题中没有这些信息?
  • 我想知道这在查询中是否可行,而不是编码或其他东西。

标签: sql ms-access inner-join


【解决方案1】:

创建一个帮助表Calendar,存储所有可能的值。 RIGHT JOIN它:

SELECT pth.MA, pth.Year, pth.CalendarWeek,
pth.Hours, p.Name, p.Lastname 
FROM PersonTotalHours pth
INNER JOIN Person p
    ON pth.MA = p.MA
RIGHT JOIN Calendar c
    ON pth.Year = c.Year AND pth.CalendarWeek = c.CalendarWeek

(使用表别名来节省一些输入。)

编辑: MS Access 查询尝试,版本 1:

SELECT pth.MA, pth.Year, pth.CalendarWeek,
pth.Hours, p.Name, p.Lastname 
FROM (PersonTotalHours pth
INNER JOIN Person p
    ON pth.MA = p.MA)
RIGHT JOIN Calendar c
    ON pth.Year = c.Year AND pth.CalendarWeek = c.CalendarWeek

编辑: MS Access 查询尝试,版本 2:

SELECT pth.MA, pth.Year, pth.CalendarWeek,
pth.Hours, p.Name, p.Lastname 
FROM calendar
    left join (PersonTotalHours pth
               INNER JOIN Person p ON pth.MA = p.MA)
    ON pth.Year = c.Year AND pth.CalendarWeek = c.CalendarWeek

【讨论】:

  • 已更正。 (错过删除分号...)顺便说一句,YEAR 是 ANSI SQL 中的保留字,因此您可能需要将该列分隔为 "YEAR"
  • 不,自己删除了冒号,但仍然出现“Operator missing”错误
  • 您已经创建了包含 year 和 CalendarWeek 列的日历表? (并将数据插入其中。)
  • 我做到了。现在我得到不支持的连接表达式,在第一个连接周围加上括号。
  • 您使用的是哪个 dbms? MS Access...?
【解决方案2】:

请检查此查询。

select PersonTotalHours.MA,PersonTotalHours.YEAR,b.CalendarWeek, PersonTotalHours.Hours, '' Name, '' LastName from PersonTotalHours
right join (
select '' MA, 0 Year, no CalendarWeek, 0 Hours, '' Name, '' Lastname from (
select row_number() over(order by object_id) no from sys.all_objects
) a where no <= 53) b on b.CalendarWeek = Table_1.CalendarWeek

我没有加入人员表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多