2015-06-19 80 views
-1

我需要在Access中爲我的查詢添加適當的「needCounter」列代碼。 它應該將行數從1計數到「WorksPerWeekCounter」,如最後一個黃色列所示。或更好的0至「WorksPerWeekCounter-1」 :)訪問查詢 - 使用子查詢計數器添加列

我找到我的代碼錯了,因爲我的「櫃檯」不符合我的「counterMin」

比方說,我有一個表[WORKS(roboczy)],前4列如下[http://i.stack.imgur.com/mTO53.jpg][picture]所示。 (對不起,我的名聲太低,無法顯示圖片)

這是Access查詢代碼我使用(week2date功能是在VBA代碼):

SELECT 
    W.Id_work, W.Id_pracownika, W.vecka, W.Rok, 
    week2date(W.vecka,W.Rok) AS dataWK, 
    C.countWorksPerWeek as WorksPerWeekCounter, 
    C.Id_workMin as id_workMin, 
    (W.Id_work- C.Id_workMin) as AddDays, 
    DCount([Id_work],"[WORKS(roboczy)]","Id_work<=" & [Id_work]) AS counter, 
    C.counterMin 
FROM [WORKS(roboczy)] W 
inner join 
(SELECT count(id_work) as countWorksPerWeek, Id_pracownika, vecka, Rok, min(id_work) as Id_workMin, min(DCount([Id_work],"[WORKS(roboczy)]","Id_work<=" & [Id_work])) AS counterMin 
    FROM [WORKS(roboczy)] 
    GROUP BY Id_pracownika, vecka, Rok 
) C ON W.Id_pracownika = C.Id_pracownika AND W.vecka = C.vecka AND C.Rok = W.Rok 
GROUP BY W.Id_pracownika, W.vecka, Id_work, W.Rok, week2date(W.vecka,W.Rok), C.countWorksPerWeek, C.Id_workMin, C.counterMin 
+0

很難確切地說出你的計數器變量的目的是什麼......你能澄清一下嗎? –

+0

我會盡力解釋: – mallorn

+0

我有一些行[WorksPerWeekCounter]具有相同的日期[dataWK]和[Id_pracownika]。 但是,如果有多於一行,我需要從[dataWK]中整週(隨機)計算它們。其餘的計數器我不需要。 因此,[needCounter]應該從1到[WorksPerWeekCounter]中計算特定[dataWK]和[Id_pracownika]的行,以計算稍後需要添加到[dataWK]的日期(0-6) – mallorn

回答

0

您可以在一個步驟中使用了一系列的子查詢:

SELECT w.Id_work, w.Id_pracownika, w.vecka, w.Rok, w.dataWK, 

(SELECT count(w2.Rok) FROM WorkCounter w2 
WHERE w2.vecka = w.vecka GROUP BY w2.vecka) As WorksPerWeekCounter, 

(SELECT min(w3.Id_work) FROM WorkCounter w3 
WHERE w3.vecka = w.vecka GROUP BY w3.vecka) As id_workMin, 

w.Id_work - 
(SELECT min(w3.Id_work) FROM WorkCounter w3 
WHERE w3.vecka = w.vecka GROUP BY w3.vecka) As AddDays, 

(SELECT count(*) FROM WorkCounter w4 
WHERE w4.Id_work <= w.Id_work and w4.vecka = w.vecka) As Counter 

FROM [WORKS(roboczy)] W