【发布时间】:2012-11-07 15:02:33
【问题描述】:
我有 52 列是/否参加每周 .. 我想查询以了解其中包含“是”或“否”的列数...有人可以帮我解决这个问题吗?如果您知道任何用于访问查询的推荐站点或社区,请告诉我。谢谢。
【问题讨论】:
-
在我看来问题是这个数据库模式设计得很糟糕。我会将这些数据存储在不同的行中......还有53 week years那些呢?
标签: sql ms-access ms-access-2010
我有 52 列是/否参加每周 .. 我想查询以了解其中包含“是”或“否”的列数...有人可以帮我解决这个问题吗?如果您知道任何用于访问查询的推荐站点或社区,请告诉我。谢谢。
【问题讨论】:
标签: sql ms-access ms-access-2010
我认为这是一个糟糕的设计。它打破了第一范式。
我可以设想一个用户表、一个会议表和一个多对多 JOIN 表,将用户与他们参加的会议联系起来。
查询所有会议会告诉您可以参加的日期。
使用 user_meeting JOIN 表加入用户表可以告诉您给定用户参加了哪些会议。
现在您有两组:所有可能的会议和给定用户参加的日期。如果您设置不同,您将看到用户未参加的潜在日期。
【讨论】:
以下是如何使用列表的粗略草图。毫无疑问还有其他更好的方法,但这只是一个开始。
间隔三周:
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
【讨论】: