2016-08-08 36 views
1

我有以下查詢:秀行沒有數據訪問

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周)都有一排,而對於那些現在不存在的周而言,有幾小時= 0的情況?

編輯 我已經通過在表格中添加缺少的行來解決這個問題。使用報表打開時調用的函數。仍在尋找一個非愚蠢的解決方案。

+0

@Snickbrack我編輯了標籤。 –

+0

你想用這個查詢來完成什麼? – Snickbrack

+0

@Snickbrack用於顯示訪問報告中的數據。 – dieKoderin

回答

4

創建幫助表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 
+0

我得到此查詢的語法錯誤 – dieKoderin

+0

已更正。 (錯過刪除分號......)順便提一下,'YEAR'是ANSI SQL中的一個保留字,因此您可能需要將該列分隔爲'「YEAR」'。 – jarlh

+0

不,自己刪除了冒號,但仍然出現「操作員丟失」錯誤 – dieKoderin

0

請檢查此查詢。

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 

我不加入人表。