2012-11-07 2 views
-2

나는 출석을위한 예/아니오 열 52 개가 있습니다. 예 또는 아니오 ...이 문제를 해결하는 데 도움을 줄 수있는 열의 수를 알기 위해 쿼리를 만들고 싶습니다. Access 쿼리를 위해 추천 사이트 또는 커뮤니티를 알고 계시다면 알려주십시오. 감사.MS Access 2010의 열 수는 무엇입니까?

+3

제 생각에 문제는이 DB 스키마가 심하게 설계되어 있다는 점이다. 이 데이터를 다른 행에 저장하고 싶습니다. 또한 [53 주년] (http://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year)이 무엇입니까? – ppeterka

답변

1

나는 이것이 좋지 않은 디자인이라고 생각합니다. 그것은 첫번째 정상적인 형태를 깬다.

사용자 테이블, 미팅 테이블 및 사용자를 참석 한 미팅과 연결하는 다 대다 JOIN 테이블을 구상 할 수 있습니다.

모든 회의를 쿼리하면 참석할 수있는 날짜가 표시됩니다.

user_meeting JOIN 테이블을 사용하여 사용자 테이블을 조인하면 주어진 사용자가 참석 한 모임을 알 수 있습니다.

이제는 가능한 모든 모임과 주어진 사용자가 참석 한 날짜가 두 세트 있습니다. 차액을 설정하면 사용자가 참석하지 않은 잠재적 인 날짜가 표시됩니다.

+0

그래서 52 주 동안 어떻게 참석할 수 있습니까? 그리고 3 주 동안 참석하지 않으면 ... 다른 컬럼에서 말해주세요! –

0

다음은 목록 작업 방법에 대한 대략적인 스케치입니다. 의심 할 여지없이 다른 방법과 더 좋은 방법이 있지만 시작에 불과합니다.

된 3 주 간격 : 출석의

SELECT b.UserID, b.WeekNo, (SELECT Top 1 WeekNo 
    FROM (SELECT * FROM table2 WHERE Attended=True) a 
    WHERE a.WeekNo > b.WeekNo) AS [next] 
FROM (SELECT * FROM table2 WHERE Attended=True) AS b 
WHERE (((b.UserID)=1) AND (((SELECT Top 1 WeekNo 
    FROM (SELECT * FROM table2 WHERE Attended=True) a 
    WHERE a.WeekNo > b.WeekNo))>[b].[WeekNo]+3)) 
ORDER BY b.WeekNo; 

번호 :

SELECT Table2.UserID, Sum(Abs([Attended])) AS Attend 
FROM Table2 
GROUP BY Table2.UserID; 

표 :

UserID WeekNo Attended 
1  1  True 
1  2  True 
1  3  True 
1  4  True 
1  5  False 
1  6  False 
1  7  True 
1  8  True 
1  9  False 
1  10  False 
1  11  False 
1  12  True 
1  13  True 
1  14  True 
+0

해결책을 증명하기 위해이 예제로 첨부 파일을 보낼 수 있습니까? –

+0

당신은 데이터베이스의 디자인을 작성하는 것은 매우 나쁘고 가난했습니다. 나는 당신의 충고를 말하고 새로운 테이블에 넣습니다 ... 고맙습니다. –